如何按键对多维数组中的子数组进行排序?



我有这样一个数组,例如:

$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)
);

相关内容

  • 没有找到相关文章

最新更新