ホームページ >バックエンド開発 >PHPチュートリアル >カスタム関数を使用した配列の並べ替えについて
たとえば、関数 uasort() は 2 つのカスタム関数を比較します。
<?phpfunction a_sort($a, $b){ echo $a . '--' . $b . "<br />"; if($a==$b) return 0; return ($a>$b) ? 1 : -1;}function b_sort($a, $b){ echo $a . '--' . $b . "<br />"; if($a==$b) return 0; return ($a>$b) ? -1 : 1;}$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');uasort($arr, 'a_sort');print_r($arr);echo "<br />--------------------<br />";$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');uasort($arr, 'b_sort');print_r($arr);?>
1回目 $a='where', $b='what' 2回目 $a=where, $b=20 がソートルールの役割です
($a>$b) ? 1 : -1; は小さいものから大きいものへ ($a>$b) ? -1 : 1; は大きいものから小さいものを意味します
1. カスタム関数それは動作します。たとえば、a_sort: 1 回目は $a='where'、$b='what'; 2 回目は $a=where、$b=20.... これはなぜでしょうか。
$a と $b は、a_sort メソッドと b_sort メソッドで定義されたパラメーターです。毎回、比較する必要がある配列内の要素が、比較を実行するために 2 つのパラメーター $a と $b を通じてメソッドに渡されます。
つまり、$a と $b は毎回異なります。
1 回目は $a='where', $b='what'; 2 回目は $a=where, $b=20 です。
比較プロセスでは、配列内の各要素を他の要素と比較するためです。比較してみましょう。
これで $arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how'); になります。実行される
a b
a c
a d
比較
次に
b c
b d
最後に
c d
比較
2. return 0、1、-1 は何を意味し、ソートにどのように影響しますか?
0 は等しい
1 はより大きい
-1 はより小さい
理由を説明せずに
どこで-何を
どこで--20
どのように--どこで
何を --どのように
カスタム並べ替え関数は、挿入並べ替えアルゴリズムと組み合わせた双方向バブル アルゴリズムを使用します
比較は中央から両端まで拡張されます
2 番目の質問マニュアルでは、それが非常に明確になっています。
比較関数は、最初の引数が 2 番目の引数より小さい、等しい、または大きいとみなされる場合、それぞれゼロより小さい、ゼロに等しい、またはゼロより大きい整数を返す必要があります。
はは、#1 は基本的に言及されていません。#2 は一般原則に基づいているだけです
理由は説明されていません
どこ--何を
どこ--20
どのように--どこで
何を--どのように
カスタム並べ替え関数 挿入ソート アルゴリズムと組み合わせた双方向バブル アルゴリズムを使用します
比較は中心から両端まで拡張されます
2 番目の質問マニュアルで非常に明確に説明されています:
比較関数は以下とみなされる必要があります。最初のパラメータまたは 2 番目の引数より大きい場合は、それぞれゼロ以下、ゼロ以上、またはゼロより大きい整数を返します。