几个经过封装的方法:

1.使用 array_multisort() 函数

<?php$arr = [['name'=>'dee','age'=>28],['name'=>'emperor', 'age'=>30],['name'=>'Lee', 'age'=>32],['name'=>'Arshavin', 'age'=>33],['name'=>'Totti', 'age'=>40]
];$arr2 = [['name'=>'Ozil', 'age'=>27],['name'=>'CR7', 'age'=>29],['name'=>'Doctor', 'age'=>33],['name'=>'John', 'age'=>35]
];function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {if (is_array($multi_array)) {foreach ($multi_array as $row_array) {if (is_array($row_array)) {$key_array[] = $row_array[$sort_key];} else {return FALSE;}}} else {return FALSE;}array_multisort($key_array, $sort, $multi_array);return $multi_array;
}$arr = array_merge($arr, $arr2);
$arr = multi_array_sort($arr, 'age', SORT_ASC);echo '<pre>';
print_r($arr);

说明:在 multi_array_sort 的自定义方法中,$key_array 完成对年龄的一维数组的排序,再使用 array_multisort() 函数对原数组进行排序。

bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )

array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。

2. 使用临时数组存储需要排序的字段,经过排序后,通过在 froeach 循环中 $new_array[] = $arr[$k]; 把经过排序的字段数组的索引值作为原始数组的索引值存储至新的数组

<?php$arr = [['name'=>'dee','age'=>28],['name'=>'emperor', 'age'=>30],['name'=>'Lee', 'age'=>32],['name'=>'Arshavin', 'age'=>33],['name'=>'Totti', 'age'=>40]
];$arr2 = [['name'=>'Ozil', 'age'=>27],['name'=>'CR7', 'age'=>29],['name'=>'Doctor', 'age'=>33],['name'=>'John', 'age'=>35]
];function array_sort($arr, $keys, $type = 'asc') {$keysvalue = $new_array = array();foreach ($arr as $k => $v) {$keysvalue[$k] = $v[$keys];}if ($type == 'asc') {asort($keysvalue);} else {arsort($keysvalue);}reset($keysvalue);foreach ($keysvalue as $k => $v) {$new_array[] = $arr[$k];}return $new_array;
}$arr = array_merge($arr, $arr2);
$arr = array_sort($arr, 'age');echo '<pre>';
print_r($arr);

  

3. 和 2 差不多,多了些验证

<?php$arr = [['name'=>'dee','age'=>28],['name'=>'emperor', 'age'=>30],['name'=>'Lee', 'age'=>32],['name'=>'Arshavin', 'age'=>33],['name'=>'Totti', 'age'=>40]
];$arr2 = [['name'=>'Ozil', 'age'=>27],['name'=>'CR7', 'age'=>29],['name'=>'Doctor', 'age'=>33],['name'=>'John', 'age'=>35]
];function array_sort($array,$keys,$type='asc'){if(!isset($array) || !is_array($array) || empty($array)){return '';}if(!isset($keys) || trim($keys)==''){return '';}if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){return '';}$keysvalue=array();foreach($array as $key=>$val){$keysvalue[] =$val[$keys];}asort($keysvalue); //key值排序reset($keysvalue); //指针重新指向数组第一个foreach($keysvalue as $key=>$vals) {$keysort[] = $key;}$keysvalue = array();$count=count($keysort);if(strtolower($type) != 'asc'){for($i=$count-1; $i>=0; $i--) {$keysvalue[] = $array[$keysort[$i]];}}else{for($i=0; $i<$count; $i++){$keysvalue[] = $array[$keysort[$i]];}}return $keysvalue;
}$arr = array_merge($arr, $arr2);
$arr = array_sort($arr, 'age');echo '<pre>';
print_r($arr);

  

参考:php对多维数组的某个键值排序方法

转载于:https://www.cnblogs.com/dee0912/p/5372537.html

PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)相关推荐

  1. PHP 两个多维数组根据某个键的值进行组合排序的几种思路

    需求: 有两个多维数组 $arr = [['name'=>'dee','age'=>28],['name'=>'emperor', 'age'=>30],['name'=> ...

  2. PHP实现对多维数组按照某个键值排序的两种解决方法

    实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种: array_multisort()函数对多个数组或多维数组进行排序. //对数组$ho ...

  3. php多维求组按照健值排序,PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】...

    本文实例讲述了PHP编程实现多维数组按照某个键值排序的方法.分享给大家供大家参考,具体如下: 实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第 ...

  4. C语言试题三十七之求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数。

    1. 题目 请编写一个函数function,它的功能是:求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中 ...

  5. php查找判断二维数组中是否含有某个值

    php判断二维数组中是否含有某个值 $arr = array(array('a', 'b'),array('c', 'd') );in_array('a', $arr); // 此时返回的永远都是 f ...

  6. 杨桃的Python进阶讲座16——数组array(六)一维数组和二维数组的索引和取值(配详细图解)

    本人CSDN博客专栏:https://blog.csdn.net/yty_7 Github地址:https://github.com/yot777/ 在进阶讲座8中讲过数组(矩阵)的维度,我们再看看多 ...

  7. php指定键名排序,php二维数组指定其键名对其排序的方法

    安利个小李子先 $arr=[ '2'=>'red', '5'=>'green', 'name'=>'tom' ]; $other=[ '5'=>'new red', 'name ...

  8. php二维数组指定其键名对其排序的方法

    安利个小李子先 <?php $arr=['2'=>'red','5'=>'green','name'=>'tom' ];$other=[ '5'=>'new red', ...

  9. c语言二维数组输入数据,c语言编写程序,把下面的数据输入到一个二维数组中:...

    c语言编写程序,把下面的数据输入到一个二维数组中: 答案:3  信息版本:手机版 解决时间 2019-10-07 01:08 已解决 2019-10-06 03:19 1. 编写程序,把下面的数据输入 ...

最新文章

  1. shiro 授权介绍
  2. apache和tomcat区别
  3. V3S中默认时区设置(笔记)
  4. BAT Android面试专题深入探究:四大组件+ViewPager+组件化架构+Bitmap
  5. 遥感计算机分类有哪些,遥感数字图像的计算机分类.doc
  6. 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
  7. 访问index.php跳转,打开index.php后,跳转到/user/login.html
  8. 卷积神经网络中十大令人拍案叫绝的操作
  9. DeprecationWarning:current URL string parser is deprecated, and will be removed in a future version.
  10. Oracle Data Guard (RAC+DG) 归档删除策略及脚本
  11. 在计算机中 ascii码是几位二进制编码,ASCII码采用多少位二进制编码
  12. softmax回归的从零开始实现-09-p4
  13. OpenGL基础42:实例化
  14. 64位CentOS 6.4下安装wine
  15. python 运行时 变量_在运行时在python中检索变量的名称?
  16. 工程力学和计算机专业,工程力学本科专业介绍
  17. c语言求解一元二次方程的两相等实根,C语言 求解一元二次方程
  18. ubuntu16.04设置自启动wifi热点
  19. 实践者颜水成:在学术界「恋爱」 在工业界「结婚」
  20. 【趣文】我是一个线程

热门文章

  1. (1分钟速通面试) 矩阵分解相关内容
  2. Proteus仿真--51单片机最小系统
  3. 钉钉E应用自动登录获取用户信息总结
  4. WebFlux客户端WebClient
  5. 什么时候使用接口,什么时候使用抽象类
  6. 教学计划计算机,有关计算机教学计划三篇
  7. “组织行为学”--串讲学习笔记
  8. ps中背景橡皮擦抠图方法
  9. 全面解析人、机、料、法、环、测!
  10. 水动力学类毕业论文文献有哪些?