相关疑难解决方法(0)

使用PHP的uasort排序时保留键顺序(稳定排序)

这个问题实际上是来自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 arrays sorting algorithm

23
推荐指数
4
解决办法
1万
查看次数

使用arsort排序不稳定

在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的值相同.

这个问题有什么解决方案吗?我想要的顺序应该是肯定的.如果某些索引的值相同,则按降序或升序排序.

php sorting

2
推荐指数
1
解决办法
343
查看次数

标签 统计

php ×2

sorting ×2

algorithm ×1

arrays ×1