【发布时间】:2011-05-20 05:14:37
【问题描述】:
这个问题实际上是受 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);
?>
陷阱:因为键是在原始数组中排序的,所以请不要试图建议任何按键排序以恢复到原始顺序。我用它们制作了示例,以便更容易在输出中直观地检查它们的顺序。
【问题讨论】:
-
换句话说,这个问题的解决方案是一种稳定的排序算法,而PHP的排序算法表面上都不是。
-
我很怀疑,但我想要一个明确的答案和/或可能的解决方法。
-
是否有理由只使用 biult-in 功能?
-
php.net/manual/en/array.sorting.php - 如果这些排序函数中的任何一个计算两个成员相等,则顺序未定义(排序不稳定)。
-
请看一下:notmysock.org/blog/php/schwartzian-transform.html 它解决了我的问题。
标签: php arrays algorithm sorting