PHP数组反转ksort

3

我有一个数组,它长这样:

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

我接着使用ksort($array)对数组进行排序,排序结果为28、29、30和31,但问题在于1-4这些数字与值相关联,因此顺序被颠倒了。我希望28变成1,29变成2等等。

有没有一种方法可以在不创建foreach循环和重构新数组的情况下完成这个转换?

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
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接