ホームページ >バックエンド開発 >PHPチュートリアル >配列のソートに関するこのコードはまったく理解できません

配列のソートに関するこのコードはまったく理解できません

WBOY
WBOYオリジナル
2016-06-13 12:14:25741ブラウズ

このコードはまったく理解できません。配列をソートするコードです。

この投稿は、baidu_24894285 によって 2015-01-26 20:32:24 に最終編集されました2 次元配列を定義し、2 つの関数をカスタマイズします。最初の関数は配列の 2 番目の列をアルファベットの昇順に並べ替え、2 番目の関数は配列の 3 番目の列
を数値の昇順に並べ替えます。
私が理解できないのは、これら 2 つのカスタム関数が非常に奇妙であるということです。これらの $x $y が何を表しているのか理解できません。なぜそれらを比較するのでしょうか?誰かが論理構造を詳しく説明してくれることを願っています。

b4649f6c34c2590d722f133f087cf7f6


出力結果:
array (size=3)
0 => 配列 (サイズ = 3)
0 => 文字列 'TIR' (長さ = 3)
1 => 文字列 'タイヤ' (長さ = 5)
2 => 文字列 '100' (長さ = 3)
1 => 配列 (サイズ = 3)
0 => 文字列 'OIL' (長さ = 3)
1 => ; 文字列 'oil' (長さ=3)
2 => 文字列 '10' (長さ=2)
配列 (サイズ=3)
0 => 'SPK' (長さ=3)
1 => 文字列 'スパーク プラグ' (長さ=11)
2 => 文字列 '4' (長さ=1)

配列 (サイズ) =3)
0 =>
配列 (サイズ = 3)
0 => 文字列 'OIL' (長さ=3)
1 => )
2 => 文字列 '10' (長さ=2)
1 => 配列 (サイズ=3)
0 => 文字列 'SPK' (長さ=3)
1 => 文字列 'スパーク プラグ' (長さ=11)
2 => 文字列 '4' (長さ=1)
2 => 配列 (サイズ=3)
0 => 文字列 'TIR' (長さ=3)
1 => 文字列 'タイヤ' (長さ=5)
2 => 文字列 '100' (長さ=3)

配列 (サイズ = 3)
0 => 配列 (サイズ = 3)
0 => 文字列 'SPK' (長さ = 3)
1 =>プラグ' (長さ=11)
2 => 文字列 '4' (長さ=1)
1 => 配列 (サイズ=3)
0 => (長さ=3)
1 => 文字列 'oil' (長さ=3)
2 => 文字列 '10' (長さ=2)
2 => 配列 (サイズ=3)
0 => 文字列 'TIR' (長さ=3)
1 => 文字列 'タイヤ' (長さ=5)
2 => 文字列 '100' (長さ=3) )

------解決策のアイデア----------------------
マニュアルの usort メソッドを参照してください2 つのパラメータの説明:
cmp_function
最初のパラメータが 2 番目のパラメータより小さい、等しい、または大きい場合、比較関数は以下の整数を返す必要があります。に応じて、または 0 より大きくなります。
int callback (mixed $a, mixed $b)

分かりやすいですが、$a、$b は現在使用されている配列の要素です比較用に。あなたの例では、
array('TIR','tires','100')
array('OIL','oil','10'),
array('SPK','spark) plugs','4')

実際、$a と $b が何であるかを知りたい場合は、それを出力するだけです。
<br />$products = array(  array('TIR','tires','100'),<br />array('OIL','oil','10'),<br />array('SPK','spark plugs','4')<br />);<br /><br />function compare1($x,$y){<br />    echo 'x:';<br />    var_dump($x);<br />    echo 'y:';<br />    var_dump($y);<br /><br />    if ($x[1] == $y[1]) {<br />        return 0;<br />    }elseif ($x[1]<$y[1]) {<br />        return -1;<br />    }<br />        else{<br />    return 1;<br />    }<br />}<br /><br />usort($products,'compare1');<br />


<br />x:<br />array (size=3)<br />  0 => string 'OIL' (length=3)<br />  1 => string 'oil' (length=3)<br />  2 => string '10' (length=2)<br />y:<br />array (size=3)<br />  0 => string 'TIR' (length=3)<br />  1 => string 'tires' (length=5)<br />  2 => string '100' (length=3)<br />x:<br />array (size=3)<br />  0 => string 'SPK' (length=3)<br />  1 => string 'spark plugs' (length=11)<br />  2 => string '4' (length=1)<br />y:<br />array (size=3)<br />  0 => string 'OIL' (length=3)<br />  1 => string 'oil' (length=3)<br />  2 => string '10' (length=2)<br />x:<br />array (size=3)<br />  0 => string 'TIR' (length=3)<br />  1 => string 'tires' (length=5)<br />  2 => string '100' (length=3)<br />y:<br />array (size=3)<br />  0 => string 'OIL' (length=3)<br />  1 => string 'oil' (length=3)<br />  2 => string '10' (length=2)<br />x:<br />array (size=3)<br />  0 => string 'SPK' (length=3)<br />  1 => string 'spark plugs' (length=11)<br />  2 => string '4' (length=1)<br />y:<br />array (size=3)<br />  0 => string 'TIR' (length=3)<br />  1 => string 'tires' (length=5)<br />  2 => string '100' (length=3)<br />
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。