几个经过封装的方法:

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对多维数组的某个键值排序方法

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

  1. 实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)

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

  2. 二维数组按某个键值排序 FOR PHP

    $arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...

  3. 如何通过numpy获得二维或多维数组的最大、小值索引

    虽然numpy数组中有argmax的函数可以获得数组的最大值的索引,但该函数获得的是numpy数组平铺后的索引,也就是一维索引.那么要怎样才能获得二维索引呢?实现很简单,比如我下面的代码: impor ...

  4. PHP中如何对二维数组按某个键值进行排序

    $arr=[     array(         'name'=>'张三',         'age'=>28     ),     array(         'name'=> ...

  5. 首先定义一个5X8的二维数组,然后使用随机数填充满。借助Arrays的方法对二维数组进行排序。

    package day02; import java.util.Arrays; import java.util.Random; public class Test01 { public static ...

  6. 一个有用的排序函数,array_multisort(),下面的一个用法是根据二维数组里的一个字段值的大小,对该二维数组进行重新排序

    从二维数组$cashes中取出一列 'store_id'(二维数组中的每个一维数组都有的字段),按照这个的大小排序,对二维数组$caches里面的一维数组进行重新排序 实际应用如下 想让相同部门的排在 ...

  7. PHP编程实现多维数组按照某个键值排序的方法

    1.array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array(  array('1501'=&g ...

  8. php两个多维数组组合遍历

    $res = $this->LoanRecord->searchloan($conditions,$columns,$page,$this->num,$user_id); forea ...

  9. PHP二维数组按某个键值排序

    $data=Array(    [0] => Array        (            [id] => 2            [user_id] => 14       ...

随机推荐

  1. iOS开发——高级篇——二维码的生产和读取

    一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤:导入CoreImage框架通过滤镜CIFilter生成二维码 二维码 ...

  2. linux常用命令-文件搜索命令-locate,which,whereis,grep

    locate 目录或文件名 -i 查找的时候不区分大小写 这个类似everything,速度比find快很多,因为这个命令搜索的是它维护的文件资料库,文件资料库是var/lib/mlocate/mlo ...

  3. PYTHON 函数的动态参数

    #普通参数示例 def func(args): print(args) func(123456) #执行结果为123456 如果给多个参数,就会报错 #动态参数示例 def func(*args): ...

  4. nginx + tomcat配置负载均衡

    目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...

  5. C语言中史上最愚蠢的Bug

    C语言中史上最愚蠢的Bug   本文来自“The most stupid C bug ever”,很有意思,分享给大家.我相信这样的bug,就算你是高手你也会犯的.你来看看作者犯的这个Bug吧.. 首 ...

  6. 用 nssm 把 Nginx 安装成 Windows 服务方法

    总之:用 nssm 比 srvany.exe 简便多了.1. 下载nginx windows版本:http://nginx.org/ 2. 下载 nssm :http://nssm.cc/3. 安装N ...

  7. snprintf 使用注意

    #include <iostream> #include <cstdio> // 包含的头文件 using namespace std; int main(int argc, ...

  8. html+css做的丝带标签

    先上效果: HTML: <div class="tag"> <div class="tag-box"> <div class=&q ...

  9. ldd 命令用于判断某个可执行的binary档案含有什么动态链接库(so)

    [root@NB ok]# ldd /bin/ls linux-vdso.so. => (0x00007ffd7dbf6000) libselinux.so. => /lib64/libs ...

  10. jquery placeholder

    /* * @author ambar * html5 placeholder pollfill * - 使用绝对定位内嵌层 * - 也适用于密码域 * 目标浏览器: IE 6~9, FF 3.5 */ ...