ホームページ  >  記事  >  バックエンド開発  >  カスタム関数を使用した配列の並べ替えについて

カスタム関数を使用した配列の並べ替えについて

WBOY
WBOYオリジナル
2016-06-23 13:50:071274ブラウズ

たとえば、関数 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_sort: 1 回目は $a='where'、$b='what'; 2 回目は $a=where、$b=20.... これはなぜでしょうか。
2. return 0、1、-1 は何を意味しますか?また、それは並べ替えにどのように影響しますか?


ディスカッションへの返信(解決策)

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 はより小さい

はは、#1 は何も意味していない、#2 は一般原則に基づいて言っただけ

理由を説明せずに
どこで-何を
どこで--20
どのように--どこで
何を --どのように

カスタム並べ替え関数は、挿入並べ替えアルゴリズムと組み合わせた双方向バブル アルゴリズムを使用します
比較は中央から両端まで拡張されます

2 番目の質問マニュアルでは、それが非常に明確になっています。
比較関数は、最初の引数が 2 番目の引数より小さい、等しい、または大きいとみなされる場合、それぞれゼロより小さい、ゼロに等しい、またはゼロより大きい整数を返す必要があります。

はは、#1 は基本的に言及されていません。#2 は一般原則に基づいているだけです

理由は説明されていません
どこ--何を
どこ--20
どのように--どこで
何を--どのように

カスタム並べ替え関数 挿入ソート アルゴリズムと組み合わせた双方向バブル アルゴリズムを使用します
比較は中心から両端まで拡張されます

2 番目の質問マニュアルで非常に明確に説明されています:
比較関数は以下とみなされる必要があります。最初のパラメータまたは 2 番目の引数より大きい場合は、それぞれゼロ以下、ゼロ以上、またはゼロより大きい整数を返します。

司会者は本当に素晴らしいです
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。