我有这样一个数组,例如:
$exampleArray = array (
array( 'Name' => 'Opony', 'Kod' =>'OPO', 'Price' => 100 ),
array( 'Kod' =>'OLE', 'Name' => 'Olej', 'Price' => 20 ),
array( 'Kod' =>'ABC', 'Price' => 20, 'Name' => 'abcdefg' )
)
子数组中的键是随机顺序的。我想按键对子数组进行排序:
<>之前的数组([0] =>数组([Kod] => OPO[Name] => Opony[价格]=> 100)[1] =>数组([Kod] => OLE[Name] => Olej[价格]=> 20)之前我试试这个:
function compr($x,$y){
if($x == $y)
return 0;
elseif($x>$y)
return 1;
elseif($x<$y)
return-1;
}
uksort($exampleArray, 'compr');
print_r($exampleArray);
但是这段代码没有给我预期的结果,是什么错了,我该如何解决它?
这应该可以为您工作:
只是循环通过你所有的内部数组by reference
,然后只是使用uksort()
与strcasecmp()
的键排序你的内部数组。
foreach($exampleArray as &$v) {
uksort($v, function($a, $b){
return strcasecmp($a, $b);
});
}
unset($v); //So if you use $v later it doesn't change the last element of the array by reference
输出:Array
(
[0] => Array
(
[Kod] => OPO
[Name] => Opony
[Price] => 100
)
//...
[2] => Array
(
[Kod] => ABC
[Name] => abcdefg
[Price] => 20
)
)
绝对没有理由在这里调用用户定义的排序算法(uksort()
)。
每一行调用ksort()
。
代码(演示):
foreach ($array as &$row) {
ksort($row);
}
var_export($array);
或(演示)
array_walk($array, fn(&$row) => ksort($row));
var_export($array);
或(演示)
function keySortRow(array $row): array {
ksort($row);
return $row;
}
var_export(
array_map('keySortRow', $array)
);