PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)
几个经过封装的方法:
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 两个多维数组根据某个键的值进行组合排序的几种思路(二)的更多相关文章
- 实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)
实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种:array_multisort()函数对多个数组或多维数组进行排序. //对数组$ ...
- 二维数组按某个键值排序 FOR PHP
$arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...
- 如何通过numpy获得二维或多维数组的最大、小值索引
虽然numpy数组中有argmax的函数可以获得数组的最大值的索引,但该函数获得的是numpy数组平铺后的索引,也就是一维索引.那么要怎样才能获得二维索引呢?实现很简单,比如我下面的代码: impor ...
- PHP中如何对二维数组按某个键值进行排序
$arr=[ array( 'name'=>'张三', 'age'=>28 ), array( 'name'=> ...
- 首先定义一个5X8的二维数组,然后使用随机数填充满。借助Arrays的方法对二维数组进行排序。
package day02; import java.util.Arrays; import java.util.Random; public class Test01 { public static ...
- 一个有用的排序函数,array_multisort(),下面的一个用法是根据二维数组里的一个字段值的大小,对该二维数组进行重新排序
从二维数组$cashes中取出一列 'store_id'(二维数组中的每个一维数组都有的字段),按照这个的大小排序,对二维数组$caches里面的一维数组进行重新排序 实际应用如下 想让相同部门的排在 ...
- PHP编程实现多维数组按照某个键值排序的方法
1.array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array( array('1501'=&g ...
- php两个多维数组组合遍历
$res = $this->LoanRecord->searchloan($conditions,$columns,$page,$this->num,$user_id); forea ...
- PHP二维数组按某个键值排序
$data=Array( [0] => Array ( [id] => 2 [user_id] => 14 ...
随机推荐
- double 和 float
对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位.但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言 ...
- Excel 点滴积累
1.Excel中截取邮件@之后的字符 MID(text, start_num, num_chars) FIND(find_text,within_text,start_num) Right(strin ...
- SQLServer2008设置 开启远程连接
SQLServer2008设置 开启远程连接 前一段时间,学生分组做项目,使用SVN工具,要求功能使用存储过程,在数据库这块出现这么一个问题: A学生在他的数据库上添加了存储过程,需要其他的B,C,D ...
- iOS 获取沙盒路径方法
//获取家目录路径的函数: NSString *homeDir = NSHomeDirectory(); //获取Documents目录路径的方法: NSArray *paths = NSSearch ...
- CPrimerPlus第十一章中的“选择排序算法”学习
C Primer Plus第十一章字符串排序程序11.25中,涉及到“选择排序算法”,这也是找工作笔试或面试可能会遇到的题目,下面谈谈自己的理解. 举个例子:对数组num[5]={3,5,2,1,4} ...
- (2016弱校联盟十一专场10.3) A.Best Matched Pair
题目链接 #include<cstdio> #include<cstring> #include<algorithm> #include<stack> ...
- [BI项目记]-DB脚本同步
BI项目中会有很多不同种类的项目,其中比较比较大的一部分就是对DB脚本的处理.然而DB的脚本毕竟无法在项目中进行维护,所以这里介绍如何对DB的脚本进行版本上的维护. 数据库脚本本身没有项目模板支持,很 ...
- 使用ajax.dll时js脚本错误-XXX未定义
操作系统:Windows 7 IIS:7.5 ajax.dll现在用的比较少,但是以前的项目有这个,使用的时候很容易出现这个错误,因为总是会遗漏配置. 使用ajax.dll时,js脚本错误,无法调用后 ...
- redis非特定类型命令
1. key查询 keys my* #获取当前数据库中符合模式的所有key exists mykey #查看key是否还存在 2. 数据库操作 redis默认一个实例的数据库是16个[db0-db15 ...
- 《DSP using MATLAB》示例Example5.16
代码: x1 = [1,2,2,1]; x2 = [1,-1,-1,1]; x3 = conv(x1,x2); % N = 5 n1 = 0:1:length(x1)-1; n2 = 0:1:leng ...