反转PHP数组ksort

时间:2013-10-04 19:59:08

标签: php arrays ksort

我有一个这样的数组:

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

然后我使用ksort($array)将其分类为28,29,30和31,但问题是数字1-4与值一起变为反转。我希望28成为1,29成为2等。

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

1 个答案:

答案 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
)