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 ...
随机推荐
- MySQL SQL中的安全问题
一.SQL注入是一个很常见的问题:利用的原理是SQL语句中的 "or"操作符或者"/*"和"#"注释符.前者利用逻辑运算,或者利用MySQL ...
- js操作数组的一些小技巧
1.从数组中随机获取成员 var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119]; var rando ...
- url和urn和uri
1.需求 理清三者的关系 2.例子 3.说明 url是资源的位置(包含scheme),urn表示资源的名字.url是唯一的.urn不是. 他们2个都是uri的子集 参考资料:https://danie ...
- 使用http.sys,让delphi 的多层服务飞起来
核心提示:一直以来,delphi 的网络通讯层都是以indy 为主,虽然indy 的功能非常多,涉及到网络服务的各个方面,但是对于大多数多层服务来说,就是需要一个快速.稳定.高效的传输层.Delphi ...
- redis 快速入门(win7)
0:介绍 百度百科or官网 1:下载 选择32位或者64 地址:https://github.com/dmajkic/redis/downloads 1.1下载后如图 1.2文件介绍 redis-s ...
- ubuntu下安装chrome
首先.题主在试过直接ubuntu终端命令安装chrome失败. 把经历过的错误稍微提一下: 在终端输入 下载安装包 sudo wget https://dl.google.com/linux/dire ...
- iOS App禁止横屏
修改Info.plist文件Supported interface orientations的项目 该项目是字典 把Landscape相关的键值删除即可
- 使用EmBitz开发STM32项目的环境配置
一.EmBitz软件获取与安装 1.EmBitz软件的获取 EmBitz原名Em::Blocks,是基于Code::Blocks开发的,面向嵌入式的C/C++集成开发环境.支持J-Link和ST-Li ...
- iOS开发UI篇—核心动画(关键帧动画)
转自:http://www.cnblogs.com/wendingding/p/3801330.html iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimatio ...
- vim使用技巧
1.vim 编辑下内容复制.剪切到windows下 "+y 或 "+d 2.从win 复制到 vim CTRL+Shift+v 3.选择文字 v+方向键