PHP 4.1.0 以降では、比較された値が同じ場合、usort の元の位置が変更される可能性があります:
2 つのメンバーが等しい場合、並べ替えられた配列内の順序は定義されません。 , 比較された 2 つの値が同じ場合、並べ替え結果での順序はランダムになります。同じ値の元の位置を保持する必要がある場合は、この記事の方法を参照してください。
デモデータ:
コードをコピー コードは次のとおりです:
/*
PHPで値が同じ場合にusortが元の位置を変更する問題を解決します
作者: Artlover http://www.CodeBit .cn
*/
$arr = array(
array('a' => 5, 'b' => 3),
array('a' => ; 5, 'b' => 1) 、
array('a' => 5, 'b' => 4)、
array('a' => 5, 'b' => 2 ),
);
?>
望ましい結果は、既存の位置を変更しないことです。つまり、b の順序は 3、1、4、です。 2
比較したフィールドの値が同じ場合、usortを使用して並べ替えます。元の順序は変更される可能性があります
コードをコピーします コードは次のとおりです:
/*
PHPで値が同じ場合にusortが元の位置を変更してしまう問題を解決
Author: Artlover http://www. CodeBit.cn
*/
$callback = create_function('$a,$b ', 'return ($a["a"] == $b["a"])?0:(($a["a "] > 次のように:
Array
(
[0] => ; 配列
(
[a] => 5
[b] => 2 ) [1] => 配列 ( [a] => 5
[b] => 4
)
[2] => 配列
(
[a] => 5
[b] => 1
)
[3] => 配列
(
[a] => 5
[b] => 3
)
)
並べ替えフィールドの値は同じですが、usort は配列全体の順序を崩します。
比較した値が同じ場合に元の位置を保持したい場合は、array_multisort を使用できます:
コードをコピーします
コードは次のとおりです:
/ *
値が同じ場合に元の位置を変更するには PHP で usort を解決してください 質問
作者: Artlover http://www.CodeBit.cn
*/
// Index counter $i = 0; // 2 つの空の配列を作成し、最初の配列には並べ替えるフィールドを保持し、2 番目の配列には元のインデックス情報を保存します $a = $index = array(); foreach ($arr as $key => $data) { $a[$key] = $data['a'];
$index[ ] = $i++;
}
// 最初の配列をソートし、次に元のインデックスでソートします
array_multisort($a, SORT_ASC, $ Index, SORT_ASC, $arr);
?>
結果:
コードをコピー
コードは次のとおりです:
Array
(
[0] => Array
(
[ある] => 5
[b] => 3
) [1] => 配列 ( [a] => 5 [b] => 1
)
[2] =>配列
(
[a] => 5
[b] => 4
)
[3] => 配列
(
[a] => 5
[b] => 2
)
)
http://www.bkjia.com/PHPjc/324740.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/324740.html
技術記事
PHP 4.1.0 以降、比較された値が同じ場合、usort の元の位置が変更される可能性があります。ドキュメントには次のように書かれています。2 つのメンバーが等しいと比較された場合、ソートされた配列内の順序は異なります。