我有一个带有字符串索引的数组,我需要对其进行部分排序。也就是说,必须先移动一些元素,但其他元素应保持当前(PHP 内部)顺序不变:
# The element with key "c" should be first
$foo = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4,
);
uksort($foo, function ($a, $b) {
if ($a === "c") {
return -1;
} elseif ($b === "c") {
return 1;
}
return 0;
});
var_dump($foo);
我所期望的:
array(4) { ["c"]=> int(3) ["a"]=> int(1) ["b"]=> int(2) ["d"]=> int(4) }
//--------------------------^ "a" remains first of the unsorted ones
我得到了什么:
array(4) { ["c"]=> int(3) ["d"]=> int(4) ["b"]=> int(2) ["a"]=> int(1) }
//--------------------------^ "d" moved above "a"
这似乎是由于uksort()
内部使用的排序算法破坏了元素的脆弱顺序。有没有其他方法可以实现这种排序?