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 相关文章推荐
php完全过滤HTML,JS,CSS等标签
Jan 16 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
php的ddos攻击解决方法
Jan 08 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
php mysql 封装类实例代码
Sep 18 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
php读取本地json文件的实例
Mar 07 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 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简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
pytorch构建多模型实例
2020/01/15 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
六十岁生日答谢词
2014/01/10 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
工地标语大全
2014/06/18 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
升学宴家长答谢词
2015/09/29 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
CentOS MySql8 远程连接实战
2022/04/19 MySQL
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang