我有一个数组,如下所示:
Array(
[31] => 1
[30] => 2
[29] => 3
[28] => 4
)然后我使用ksort($array),它将其排序为28、29、30和31,但问题是数字1-4与值相匹配,因此被颠倒了。我希望28变成1,29变成2,依此类推。
有没有一种方法可以不创建foreach循环并重新构建新的数组来进行这种切换?
发布于 2015-10-06 20:11:33
您可以翻转数组,对其进行排序,然后再将其翻转回来:
$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
)https://stackoverflow.com/questions/19189726
复制相似问题