php对二维数组按指定键值key排序示例代码


Posted in PHP onNovember 26, 2013
function array_sort($array, $key){ 

if(is_array($array)){ 

$key_array = null; 

$new_array = null; 

for( $i = 0; $i < count( $array ); $i++ ){ 

$key_array[$array[$i][$key]] = $i; 

} 

ksort($key_array); 

$j = 0; 

foreach($key_array as $k => $v){ 

$new_array[$j] = $array[$v]; 

$j++; 

} 

unset($key_array); 

return $new_array; 

}else{ 

return $array; 

} 

}

PHP二维数组按键值排序

PHP 中 array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联键名保持不变,但数字键名会被重新索引。输入数组被当成一个表的列并以行来排序,第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。

但是如果需要排序的数组是一个二维数组,需要按照数组的键值排序,如下面这个二维数组,需要按照sort键名来排序,那么array_multisort() 就无法直接实现了:

$data[5] = array('volume' => 67, 'edition' => 2);
$data[4] = array('volume' => 86, 'edition' => 1);
$data[2] = array('volume' => 85, 'edition' => 6);
$data[3] = array('volume' => 98, 'edition' => 2);
$data[1] = array('volume' => 86, 'edition' => 6);
$data[6] = array('volume' => 67, 'edition' => 7);
// 准备要排序的数组
foreach ($data as $k => $v) {
  $edition[] = $v['edition'];
}
array_multisort($edition, SORT_ASC, $data);
print_r($data);

将输出:

Array
(
  [0] => Array
    (
      [volume] => 86
      [edition] => 1
    )

  [1] => Array
    (
      [volume] => 67
      [edition] => 2
    )

  [2] => Array
    (
      [volume] => 98
      [edition] => 2
    )

  [3] => Array
    (
      [volume] => 85
      [edition] => 6
    )

  [4] => Array
    (
      [volume] => 86
      [edition] => 6
    )

  [5] => Array
    (
      [volume] => 67
      [edition] => 7
    )

)

为了不破坏原有的key,写了一个排序函数,仅支持二维数组。

/**
* 根据数组中的某个键值大小进行排序,仅支持二维数组
* 
* @param array $array 排序数组
* @param string $key 键值
* @param bool $asc 默认正序
* @return array 排序后数组
*/
function arraySortByKey(array $array, $key, $asc = true) 
{
  $result = array();
  // 整理出准备排序的数组
  foreach ( $array as $k => &$v ) {
    $values[$k] = isset($v[$key]) ? $v[$key] : '';
  }
  unset($v);
  // 对需要排序键值进行排序
  $asc ? asort($values) : arsort($values);
  // 重新排列原有数组
  foreach ( $values as $k => $v ) {
    $result[$k] = $array[$k];
  }
 
  return $result;
}
PHP 相关文章推荐
ajax完美实现两个网页 分页功能的实例代码
Apr 16 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
php实现的SESSION类
Dec 02 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
php页面缓存方法小结
Jan 10 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
php调用自己java程序的方法详解
May 13 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
Yii 2.0如何使用页面缓存方法示例
May 23 PHP
Yii 框架使用Forms操作详解
May 18 PHP
PHP反射基础知识回顾
Sep 10 PHP
PHP执行系统命令函数实例讲解
Mar 03 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 #PHP
PHP获取当前url的具体方法全面解析
Nov 26 #PHP
php 批量替换html标签的实例代码
Nov 26 #PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 #PHP
php数组去重实例及分析
Nov 26 #PHP
php三维数组去重(示例代码)
Nov 26 #PHP
php导出word格式数据的代码实例
Nov 25 #PHP
You might like
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python中使用Inotify监控文件实例
2015/02/14 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
python3实现表白神器
2019/04/09 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
python中的列表和元组区别分析
2020/12/30 Python
如何获取某个日期是当月的最后一天
2013/12/05 面试题
电子商务网站的创业计划书
2014/01/05 职场文书
企业挂职心得体会
2014/09/10 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
个人创业事迹材料
2014/12/30 职场文书
介绍信怎么写
2015/01/30 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫