我有一个这样的数组:
Array(
[31] => 1
[30] => 2
[29] => 3
[28] => 4
)
然后我使用ksort($array)
将其分类为28,29,30和31,但问题是数字1-4与值一起变为反转。我希望28成为1,29成为2等。
有没有办法不创建foreach循环并重建一个新数组来进行此切换?
答案 0 :(得分: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
)