この記事では主に PHP での usort() の使い方を紹介します。興味のある方はぜひ参考にしてください。
関数は、配列の並べ替えをカスタマイズします。並べ替えルールは $cmp_function 定义。
戻り値は true または false です。
それでは、簡単な関数を分析してみましょう:
<?php function re($a,$b){ return ($a<$b)?1:-1; }5 $x=array(1,3,2,5,9); usort($x, 're') print_r($x); ?>
出力される結果は次のとおりです:
Array( [0] => 9 [1] => 5 [2] => 3 [3] => 2 [4] => 1<br>)
は配列の逆の順序を実装します。分析は次のとおりです。
usort は配列内の値をペアで抽出し、それらをカスタム関数に順番に入力します。カスタム関数は、渡された内容に応じて 1 または -1 を返します。値は 1 または -1 の戻り値に基づいて決定されます。1 は値 2 よりも「大きい」または「小さい」ので、値は小さいものから大きいものの順に並べ替えられます。 つまり: 戻り値は 1 で、値 1 が値 2 より「大きい」ことを示し、次にソート: 値 2 -> 値 1; 戻り値は -1 で、値 1 が「小さい」ことを示します。値 2、次に並べ替え: 値 1 - > 値 2。
上記のカスタム関数で、$a<$b が正しく 1 を返した場合は、$a が $b よりも大きいことを意味し、$b->$a が返された場合は、$b->$a の順にソートされます。エラーが -1 の場合は、$a が $b より小さいことを意味し、$a->$b の順にソートされます。
より複雑な並べ替えを行ってみましょう。まず配列を奇数、次に偶数に並べ替え、次に大きいものから小さいものに並べ替えます。
function Compare($str1, $str2) { if (($str1 % 2 == 0) && ($str2 %2 == 0)) { if ($str1 > $str2) return - 1; else return 1; } if ($str1 % 2 == 0) return 1; if ($str2 % 2 == 0) return -1; return ($str2 > $str1) ? 1 : - 1; } $scores = array (22,57,55,12,87,56,54,11); usort ( $scores, 'Compare' ); print_r ( $scores );
実装手順は次のとおりです。
1》2 つの入力値が両方とも偶数であるかどうかを判断し、両方とも偶数であるかどうかを判断し、大きいものから小さいものへ並べ替えます。
2》両方とも偶数でない場合は、少なくとも 1 つが奇数である場合、まず $str1 が偶数であるかどうかを判断します。偶数の場合、つまり ($str1%2==0) が確立されている場合は 1 が返されます。 $str1 は $str2 よりも大きく、usort 関数はそれを "小さい" $ str2-> "大きい" $str1 (偶数)
3》$str1 が奇数の場合、値はありません。 $str2 が偶数であるかどうかを判断し、偶数の場合は -1 を返します。これは、$ str1 が $str2 よりも小さいことを意味し、usort 関数は $str2 よりも小さいことを意味します。 str1 (奇数) -> "大きい" $str2 (偶数);
4》両方の値が奇数の場合、上記は値を返さず、$str1 と $str2 を大きい順に並べ替えます。 ;
出力結果は次のとおりです:
Array( [0] => 87 [1] => 57 [2] => 55 [3] => 11 [4] => 56 [5] => 54 [6] => 22 [7] => 12 )
関連する推奨事項:
PHP 関数 usort() を使用してカスタム sort_PHP チュートリアルを実装する方法
PHP_I love U of (1) php 食品と飲料の保護者:二次元配列をソートする usort() 関数
PHP の usort() 関数が非安定ソートの場合はどうすればよいですか?
以上がPHP での usort() の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。