如何按每行的第一个值对数组或行进行排序?
$array = [ ['item1' => 80], ['item2' => 25], ['item3' => 85], ];
所需输出:
[ ['item2' => 25], ['item1' => 80], ['item3' => 85], ]
ryoqjall1#
您需要使用usort,这是一个通过用户定义函数对数组进行排序的函数。类似于:
usort( $yourArray, fn(array $a, array $b): int /* (1),(2) range: -1 ... 1 */ => reset($a) /* get the first array elements from $a */ <=> /* (3) <--- the spaceship operator */ reset($b) /* and from $b for comparison */ );
fn (...) => ...
function name (): int
<=>
用旧的PHP表示:
function cmp($a, $b) { $a = reset($a); // get the first array elements $b = reset($b); // for comparison. if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; } usort($yourArray, "cmp")
把这个和重复的问题的答案进行比较。
kknvjkwl2#
您需要使用usort
usort
$array = array ( 0 => array ( 'item1' => 80, ), 1 => array ( 'item2' => 25, ), 2 => array ( 'item3' => 85, ), ); function my_sort_cmp($a, $b) { reset($a); reset($b); return current($a) < current($b) ? -1 : 1; } usort($array, 'my_sort_cmp'); print_r($array);
输出:
( [0] => Array ( [item2] => 25 ) [1] => Array ( [item1] => 80 ) [2] => Array ( [item3] => 85 ) )
busg9geu3#
在现代PHP中,使用语法上很好的箭头函数和飞船操作符调用usort()。使用current()或reset()访问每行的第一个元素。代码:(Demo)
usort()
current()
reset()
usort($array, fn($a, $b) => current($a) <=> current($b));
总函数调用数较少的等效函数:(Demo)
array_multisort(array_map('current', $array), $array);
3条答案
按热度按时间ryoqjall1#
您需要使用usort,这是一个通过用户定义函数对数组进行排序的函数。类似于:
fn (...) => ...
箭头函数(PHP 7.(四)function name (): int
返回类型声明(PHP 7.0)<=>
Spaceship Operator(PHP 7.0)用旧的PHP表示:
把这个和重复的问题的答案进行比较。
kknvjkwl2#
您需要使用
usort
输出:
busg9geu3#
在现代PHP中,使用语法上很好的箭头函数和飞船操作符调用
usort()
。使用current()
或reset()
访问每行的第一个元素。代码:(Demo)
总函数调用数较少的等效函数:(Demo)