这个问题实际上是来自SO的另一个问题,我想稍微扩展一下.
有在PHP关联数组是有可能的值进行排序,但其中的值等于保留原始键顺序,使用PHP的内置排序功能的一个(或多个)?
这是我用来测试可能的解决方案的脚本(还没有找到):
<?php
header('Content-type: text/plain');
for($i=0;$i<10;$i++){
$arr['key-'.$i] = rand(1,5)*10;
}
uasort($arr, function($a, $b){
// sort condition may go here //
// Tried: return ($a == $b)?1:($a - $b); //
// Tried: return $a >= $b; //
});
print_r($arr);
?>
Run Code Online (Sandbox Code Playgroud)
陷阱:由于密钥的原始排列有序,请不要试图通过关键建议任何排序恢复到原来的顺序.我用它们做了例子,命令更容易在输出中直观地检查它们的顺序.
在php asort,arsort中有一个奇怪的问题.
我正在举例说明 arsort
情况1
$a = array(
1 => 2,
2 => 1,
3 => 2,
4 => 1
);
arsort($a);
var_dump($a);
Run Code Online (Sandbox Code Playgroud)
输出:
array(4) {
[3] =>
int(2)
[1] =>
int(2)
[4] =>
int(1)
[2] =>
int(1)
}
Run Code Online (Sandbox Code Playgroud)
这里索引(3,1)和(4,2)按降序排序,因为索引3和1的值相同.索引4和2相同.
案例2
$a = array(
1 => 2,
2 => 1,
3 => 2
);
arsort($a);
var_dump($a);
Run Code Online (Sandbox Code Playgroud)
输出:
array(3) {
[1] =>
int(2)
[3] =>
int(2)
[2] =>
int(1)
}
Run Code Online (Sandbox Code Playgroud)
这里索引(3,1)按升序排序,仍然在索引3和1的值相同.
这个问题有什么解决方案吗?我想要的顺序应该是肯定的.如果某些索引的值相同,则按降序或升序排序.