2 次元配列を定義し、2 つの関数をカスタマイズします。最初の関数は配列の 2 番目の列をアルファベットの昇順に並べ替え、2 番目の関数は配列の 3 番目の列を数値の昇順に並べ替えます。
私が理解できないのは、これら 2 つのカスタム関数が非常に奇妙であるということです。なぜこれらが比較されるのか理解できません。誰かが論理構造を詳しく説明してくれることを願っています。
$products = array( array('TIR','tires','100'),
array('OIL','oil','10'),
array('SPK', '点火プラグ','4')
);
var_dump($products);
function Compare1($x,$y){
if ($x[1] == $y[1]) {
return 0;
}elseif ($x[1]<$y[1]) {
return -1; }
else{
}
}
usort($products,'compare1' );
var_dump($products);
関数 Compare2($x,$y){
if ($x[2] == $y[2]) {
}elseif ($x[2]) ]<$y[2]) {
return -1; }
else{
}
}
var_dump($products); ;
出力結果:
配列 (サイズ = 3)
0 => 文字列 'TIR' (長さ = 3)
1 => (長さ=5)
2 => 文字列 '100' (長さ=3)
1 => 配列 (サイズ=3)
0 => 文字列 'OIL' (長さ=3)
1 =>文字列 'oil' (長さ = 3)
2 => 文字列 '10' (長さ = 2)
2 => 配列 (サイズ = 3) 0 => 文字列 'SPK' (長さ = 3)
1 => 文字列 'スパーク プラグ' (長さ=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 コードではなく、疑似コードです。それで私は混乱しました。