根据二维数组中某个字段来排序

1,一种取巧的办法php

<?php

function sortByField(array $arr, string $field, int $asc = 1) {
    if (count($arr) <= 1 || empty($field)) {
		return $arr;
	}
	$arr = array_column($arr, null, $field);
	$asc ? sort($arr) : rsort($arr);
	return $arr;	
}

$a = [
	[
		'a' => 1,
		'b' => '111'
	],
	[
		'a' => 0,
		'b' => '000'
	],
	[
		'a' => 3,
		'b' => '333'
	],
];
$res = sortByField($a, 'a');
var_dump($res);

结果code

array(3) {
 [0]=>
 array(2) {
   ["a"]=>
   int(0)
   ["b"]=>
   string(3) "000"
 }
 [1]=>
 array(2) {
   ["a"]=>
   int(1)
   ["b"]=>
   string(3) "111"
 }
 [2]=>
 array(2) {
   ["a"]=>
   int(3)
   ["b"]=>
   string(3) "333"
 }
}

还有一种是手动去创建 field的值 和 value 之间的映射,再对field的值进行排序,而后根据排序和映射,获取到结果。排序

上面这种方法利用了array_column()的特性,直接创建了这种映射。string

相关文章
相关标签/搜索