ホームページ >バックエンド開発 >PHPチュートリアル >このコードはまったく理解できません。配列をソートするコードです。
2 次元配列を定義し、2 つの関数をカスタマイズします。最初の関数は配列の 2 番目の列をアルファベットの昇順に並べ替え、2 番目の関数は配列の 3 番目の列を数値の昇順に並べ替えます。
私が理解できないのは、これら 2 つのカスタム関数が非常に奇妙であるということです。なぜこれらが比較されるのか理解できません。誰かが論理構造を詳しく説明してくれることを願っています。
07a08ef1912f589814411400c9734761 文字列 'スパーク プラグ' (長さ=11)
2 => 文字列 '4' (長さ=1)
配列 (サイズ=3)
0 = > 文字列 'OIL' (長さ=3)
1 => 文字列 '10' (長さ=2)
1 => )
0 配列 (サイズ = 3)
0 => 文字列 'TIR' (長さ = 3)
1 1 => 文字列 'タイヤ' (長さ = 5)
2 => 文字列 '100' (長さ = 3)
配列 (サイズ = 3)
0 =>
配列 (サイズ = 3)
1 => 文字列 'SPK' (長さ = 11)
プラグ 2 = > 文字列 '4' (長さ = 1)
1 => 配列 (サイズ = 3)
1 => 文字列 'オイル' (長さ=3)
2 => 文字列 '10' (長さ=2)
2 => 配列 (サイズ=3)
0 => 文字列 'TIR' (長さ=3)1 => 文字列 'tires' (長さ=5)
2 => 文字列 '100' (長さ=3)
usort メソッドの 2 番目の部分を見てください。マニュアルのパラメータの説明:
cmp_function
最初のパラメータが 2 番目のパラメータより小さい、等しい、または大きい場合、比較関数はそれに応じて 0 より小さい、0 と等しい、または 0 より大きい整数を返す必要があります。
int callback (mixed $a ,mixed $b )
理解するのは簡単ですが、$a、$b は現在比較に使用されている配列の要素です。
array('TIR','tires','100')
array('OIL','oil','10'),
array('SPK','spark plugs','4' 例では )
実際、$a と $b が何であるかを知りたい場合は、それらを印刷するだけです。
$products = array( array('TIR','tires','100'),array('OIL','oil','10'),array('SPK','spark plugs','4'));function compare1($x,$y){ echo 'x:'; var_dump($x); echo 'y:'; var_dump($y); if ($x[1] == $y[1]) { return 0; }elseif ($x[1]<$y[1]) { return -1; } else{ return 1; }}usort($products,'compare1');
x:array (size=3) 0 => string 'OIL' (length=3) 1 => string 'oil' (length=3) 2 => string '10' (length=2)y:array (size=3) 0 => string 'TIR' (length=3) 1 => string 'tires' (length=5) 2 => string '100' (length=3)x:array (size=3) 0 => string 'SPK' (length=3) 1 => string 'spark plugs' (length=11) 2 => string '4' (length=1)y:array (size=3) 0 => string 'OIL' (length=3) 1 => string 'oil' (length=3) 2 => string '10' (length=2)x:array (size=3) 0 => string 'TIR' (length=3) 1 => string 'tires' (length=5) 2 => string '100' (length=3)y:array (size=3) 0 => string 'OIL' (length=3) 1 => string 'oil' (length=3) 2 => string '10' (length=2)x:array (size=3) 0 => string 'SPK' (length=3) 1 => string 'spark plugs' (length=11) 2 => string '4' (length=1)y:array (size=3) 0 => string 'TIR' (length=3) 1 => string 'tires' (length=5) 2 => string '100' (length=3)
上の階、ありがとう、私は長い間勉強してそれを理解しました。
率直に言うと、これは PHP コードではなく、疑似コードです。それで私は混乱しました。