D丶个人博客



PHP多维数组排序-这篇文章介绍 usort() 和 array_multisort() 处理多维数组排序。 | D丶个人博客

PHP多维数组排序

这篇文章介绍 usort() 和 array_multisort() 处理多维数组排序。


在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小到大排序好了

20170916094508363.png

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

uasort($arr,'num_sort');

20170916094832347.png

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

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

20170916095723544.png

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

$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值排序

20170916101226025.png

多纬数组的排序也可以用  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:

20170916110653333.png


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




评论


About ME

about me

程序猿

热爱生活的程序猿 ,QQ:519395243

我要这天,再遮不住我眼,要这地,再埋不了我心,要这众生,都明白我意,要那诸佛,都烟消云散。 ​​​​

Contact ME

QQ:519395243

TAG cloud

友情链接