我有一个这样的数组:
Array(
[31] => 1
[30] => 2
[29] => 3
[28] => 4
)
然后我使用ksort($array)
which 将其排序为 28、29、30 和 31,但问题是数字 1-4 与值一致,因此被颠倒了。我希望 28 变成 1, 29 变成 2 等等。
有没有办法不创建 foreach 循环并重建一个新数组来进行此切换?
您可以翻转数组,对其进行排序,然后将其翻转回来:
$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
)