PHP - 如何使用不同的键按子值对数组进行排序?

时间:2016-12-13 14:44:08

标签: php sorting multidimensional-array

我已经阅读了以下内容,其中显示了当密钥相同时如何按子值对数组进行排序。 PHP Sort Array By SubArray Value

我需要以下内容:

function cmp_by_optionNumber($a, $b) {
return $a["$key"] - $b["$key"];
}

...

usort($array, "cmp_by_optionNumber");

但是,每当密钥不同时,我需要按值排序吗?最好的方法是什么?

Array
(
[Example1] => Array
    (
        [RabbitRabbit] => 91
    )

[Example2] => Array
    (
        [DogDog] => 176
    )

[Example3] => Array
    (
        [DuckDuck] => 206
    )
)

我希望排序为:

Array
(
[Example3] => Array
    (
        [DuckDuck] => 206
    )

[Example2] => Array
    (
        [DogDog] => 176
    )

[Example1] => Array
    (
        [RabbitRabbit] => 91
    )
)

EDIT!使用以下代码擦除父键名称!

return array_shift(array_values($b)) - array_shift(array_values($a));


Array
(
[0] => Array
    (
        [DuckDuck] => 206
    )

[1] => Array
    (
        [DogDog] => 176
    )

[2] => Array
    (
        [RabbitRabbit] => 91
    )

2 个答案:

答案 0 :(得分:1)

您可以使用

获取数组的第一个元素
$first = array_shift(array_values($array)); 

所以你会得到这样的东西:

function cmp_by_optionNumber($a, $b) {
    return array_shift(array_values($a)) - array_shift(array_values($b));
}

答案 1 :(得分:0)

您可以像这样使用PHP usort()

function compare_options($x, $y) {
  return $x["optionNumber"] - $y["optionNumber"];
}

usort($arr, "compare_options");
var_dump($arr);

在PHP 7或更高版本中,<=>运算符可以像这样使用:

usort($array, function ($a, $b) {
    return $x['optionNumber'] <=> $y['optionNumber'];
});

希望这有帮助!