Vah*_*hid 7 php arrays sorting
我需要根据值对php中的数组进行排序,数组使用一些数字作为键和值,例如:
$a = array(70 => 1 ,82 => 5 ,61 => 3 ,55 => 1 ,34 => 2 ,53 => 2 ,21 => 4 ,13 => 5);
Run Code Online (Sandbox Code Playgroud)
我喜欢这样排序:
Array
(
[82] => 5
[13] => 5
[21] => 4
[61] => 3
[34] => 2
[53] => 2
[70] => 1
[55] => 1
)
Run Code Online (Sandbox Code Playgroud)
我使用arsort它并且它工作,但有一个问题,因为这个函数使更改defult排序键和排序数组:
Array
(
[13] => 5
[82] => 5
[21] => 4
[61] => 3
[53] => 2
[34] => 2
[55] => 1
[70] => 1
)
Run Code Online (Sandbox Code Playgroud)
构造一个新数组,其元素是原始数组的键,值和位置:
$temp = array();
$i = 0;
foreach ($array as $key => $value) {
$temp[] = array($i, $key, $value);
$i++;
}
Run Code Online (Sandbox Code Playgroud)
然后使用用户定义的顺序排序,将原始位置考虑在内:
uasort($temp, function($a, $b) {
return $a[2] == $b[2] ? ($a[0] - $b[0]) : ($a[2] < $b[2] ? 1 : -1);
});
Run Code Online (Sandbox Code Playgroud)
最后,将其转换回原始的关联数组:
$array = array();
foreach ($temp as $val) {
$array[$val[1]] = $val[2];
}
Run Code Online (Sandbox Code Playgroud)
这是因为sort功能族不稳定.如果您需要排序稳定,那么您必须自己实现它,或者迭代排序结果并使用"更正"元素的位置array_splice.