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

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

WBOY
リリース: 2016-06-23 13:40:48
オリジナル
934 人が閲覧しました

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 コードではなく、疑似コードです。それで私は混乱しました。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート