3

我有一个这样的数组:

Array(
    [31] => 1
    [30] => 2
    [29] => 3
    [28] => 4
)

然后我使用ksort($array)which 将其排序为 28、29、30 和 31,但问题是数字 1-4 与值一致,因此被颠倒了。我希望 28 变成 1, 29 变成 2 等等。

有没有办法不创建 foreach 循环并重建一个新数组来进行此切换?

4

1 回答 1

2

您可以翻转数组,对其进行排序,然后将其翻转回来:

$array = array(31 =>1, 30 => 2, 29 => 3, 28 => 4);

$result = array_flip($array);
sort($result);
$result = array_flip($result);

这会产生一个按键排序的数组,值是从 0 开始的整数:

Array (
    [28] => 0
    [29] => 1
    [30] => 2
    [31] => 3
)

保持现有价值

如果要维护现有值,请使用该array_combine函数将排序键与旧值合并:

$result = array_flip($array);
sort($result);
$result = array_combine($result, $array);

然后得到的数组是:

Array
(
    [28] => 1
    [29] => 2
    [30] => 3
    [31] => 4
)
于 2015-10-06T12:11:32.717 回答