PHP多维数组排序

在PHP中,对各种数组排序,归功于数组函数 sort()、ksort()、rsort()、asort()...等,使用他们进行各种排序,但是用于多维数组就没那么方便简单。这篇文章介绍 usort() 和 array_multisort() 处理多维数组排序。

对于多维纬度排序使用usort()函数(自定义的比较函数对数组中的元素进行排序);

如:对2纬数组的排序

$arr=[
  ['k1'=>'11','k2'=>'d'],
  ['k1'=>'64','k2'=>'dd'],
  ['k1'=>'32','k2'=>'ddd']
];

根据数组里面k1的值小到大排序。

function num_sort($x,$y){
	if($x['k1']>$y['k1']){
		return true;	//true 就交换位置
	}elseif($x['k1']<$y['k2']){
		return false;	//false 就不交换位置
	}else{
		return 0;		// 0 就不变
	}
}
usort($arr,'num_sort');

得到的结果可以看出对数组k1小到大排序好了



如果想保持 键值关系,可以用 uasort() 函数

uasort($arr,'num_sort');


usort 函数使用自定义函数 对数组排序,自定义函数可以根据自己的需求去写,如这次我想要根据k2的长度来排序

function str_sort($x,$y){
	if(strlen($x['k2'])>strlen($y['k1'])){
		return true;	
	}else{
		return false;
	}
}
uasort($arr,'str_sort');


三纬数组同样用法,主要看自定义函数的编写

$arr = [
	[['k1'=>'4','k2'=>'dd']],
	[['k1'=>'15','k2'=>'ddd']],
	[['k1'=>'42','k2'=>'d']],
];

function num_sort($x,$y){
	if($x[0]['k1']>$y[0]['k1']){
		return true;	
	}elseif($x[0]['k1']<$y[0]['k2']){
		return false;	
	}else{
		return 0;	
	}
}
usort($arr,'num_sort');   //对三纬数组 的k1值排序



多纬数组的排序也可以用  array_multisort() 函数

array_multisort() 要先提取出至少一个 一纬数组,根据一纬数组的排序来排序多维数组

array_multisort(array1,array2,array3...)

  • SORT_ASC - 默认,按升序排列。(A-Z)
  • SORT_DESC - 按降序排列。(Z-A)
$arr = [
	['k1'=>'4','k2'=>'a'],
	['k1'=>'41','k2'=>'b'],
	['k1'=>'15','k2'=>'c'],
	['k1'=>'4','k2'=>'d'],
];

foreach ($arr as $key => $value) {
	$num[] = $value['k1'];
	$str[] = $value['k2'];
}
array_multisort($num, SORT_ASC,$str,SORT_DESC,$arr);  //先提取出一纬数组,按照$num升序,如果元素相同,则按照$str降序

$arr:


总结: usort() 更灵活,自定义函数排序,array_multisort() 先提取出一纬数组,根据一纬数组排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值