ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHP Tutorial で値が同じ場合に usort が元の位置を変更してしまう問題の解決方法

PHP_PHP Tutorial で値が同じ場合に usort が元の位置を変更してしまう問題の解決方法

WBOY
リリース: 2016-07-21 15:22:18
オリジナル
1031 人が閲覧しました

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

tru​​e

http://www.bkjia.com/PHPjc/324740.html

技術記事
PHP 4.1.0 以降、比較された値が同じ場合、usort の元の位置が変更される可能性があります。ドキュメントには次のように書かれています。2 つのメンバーが等しいと比較された場合、ソートされた配列内の順序は異なります。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート