PHP 配列の安定した並べ替えは、比較時に元のインデックスを考慮するカスタム コンパレーターを作成し、uasort() 関数を使用してキーに従って値を並べ替え、その値をキーを含む要素に設定することで実現できます。元のインデックス; これらのメソッドは、等しい要素が元の順序と同じ順序でソートされることを保証します。
#PHP 配列の安定した並べ替え: 等しい要素の順序の維持
#はじめに
安定した並べ替えにより、等しい要素の並べ替え順序が元の順序と同じになることが保証されます。ソートを安定させるには、次の比較が有効です。a == b => sort(a) <= sort(b)PHP 配列ネイティブの
sort() 関数と
rsort() 関数は不安定です。この記事では、安定した並べ替えの方法を検討します。
メソッド
1. カスタム コンパレータ
要素が等しい場合にカスタム コンパレータを使用します。元のインデックス:function cmp($a, $b) { if ($a == $b) { return 0; } return $a < $b ? -1 : 1; }次に、それを
usort() または
uksort() 関数で使用します:
usort($arr, 'cmp');
2 を使用します。 )
キーに基づいて値を並べ替えます。ksort()
はキーを並べ替えます。したがって、配列内の値を元のインデックスを含む要素に設定して、キーを並べ替えることができます。スコアは、同じスコアを持つ生徒の元の順序を維持しながら並べ替えられます。<pre class='brush:php;toolbar:false;'>$indices = array_keys($arr);
uasort($arr, function($a, $b) use ($indices) {
if ($a == $b) {
return 0;
}
return $indices[array_search($a, $arr)] < $indices[array_search($b, $arr)] ? -1 : 1;
});</pre>
出力:
$scores = [ 'John' => 90, 'Mary' => 85, 'Bob' => 85, 'Alice' => 95 ]; uasort($scores, function($a, $b) { if ($a == $b) { return 0; } return $a < $b ? -1 : 1; }); print_r($scores);
結論
上記のメソッドは PHP で実装できます。 等しい要素の順序が維持されるように、配列の順序を安定させます。
以上がPHP 配列の安定したソート: 等しい要素の順序を維持するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。