PHPの配列トラバーサルの説明
この記事では、for、foreach、list、each、key、ポインタ操作関連関数、array_flip、array_reverse、array_walksなどの関数による配列の走査を中心に説明します
1.for ループは配列を走査します
For ループは、ほぼすべての言語で使用できる配列を走査する方法ですが、PHP 言語では、for ループは配列を走査するための最初の選択肢ではありません
以下はforループを使用した配列トラバーサルのサンプルコードです
/*
Androidyueによって設計されました
php*/での配列トラバーサルの説明
//配列を通る for ループ
//配列を宣言して初期化する
$array=array('Google','Chrome','Android','Youtube','Gmail');
//for ループを使用して各配列要素を走査し、count() を使用して配列の長さを計算します
for($i=0;$i //配列の要素の値を出力します echo $array[$i]," } ?> 注: for を使用して配列を走査する場合、次の制限があります。
";
for($i=1;$i エコー $arrGoogle[$i];
}
?>
このエラーと同様のエラーが実行時に報告されます。 注意: D:/phpnow/htdocs/holiday/php_array_visit_summary.php の 13 行目で、未定義のオフセット: 1 これは、 for が連想配列の走査に適していないことを示しています
b、for によって走査される配列はインデックス配列である必要があり、添字は連続整数でなければなりません。連続整数でない場合は、プロンプトが表示されます
。
以下のコードは以下の通りです$array=array(1=>'Google',5=>'Chrome',7=>'Android',9=>'Youtube',12=>'Gmail');
//print_r($array);
for($i=0;$i
}
?>
この場合、「 Notice: Unknown offset: 2 in D:/phpnow/htdocs/holiday/php_array_visit_summary.php の 10 行目」に似たプロンプトも表示されます。したがって、for ループで走査される配列はインデックス配列である必要があります。添え字は連続している必要があります。
2.foreachは配列を走査します
foreach は、配列を走査するために PHP 言語によって提供されるメソッドであると言えます (他の言語にもある可能性があります)。この走査メソッドは、PHP が配列を走査するための最初の選択肢です。
Foreach トラバーサルは次のようになります: foreach($array as $key=>$value) にはキー値要素が含まれることも、foreach($array as $value) には値のみが含まれることもあります
foreach($array as $value) サンプルコード
/*
Androidyueによって設計されました
php*/での配列トラバーサルの説明
//foreach は配列の走査を実装します
$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');
//値のみが含まれます
foreach($arrGoogle as $value){
echo $value.'
';
}
?>
foreach($array as $key=>$value)のコード例
$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');
foreach($arrGoogle as $key=>$value){
echo '',($key+1)' 番目の配列要素の値は ',$value,'
';
}
?>
上記の $value と $key はカスタム変数なので、必要に応じて独自のスタイルに合った名前付け方法に変更できることに注意してください
3. リスト関数を使用して配列を走査します
list() 関数は、配列内の値を変数に代入します
標準構文: void list (混合変数名、混合...)
リストを使用して配列トラバーサルコードを実装する
//リストトラバーサル機能を使用する
//$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');/ /連想配列の使用は機能しません
$arrGoogle=array('google','Gmail','Chrome','Android');
list($brand,$email,$webBrowser,$phone)=$arrGoogle;
エコー $brand,$email,$webBrowser,$phone;
?>
注:
a list 関数で受け入れられる配列はインデックス配列のみであり、連想配列は使用できません。連想配列の場合は、「未定義のオフセットに注意してください」のようなプロンプトが表示されます
b 配列の値を部分的にのみ取得する場合は、次のように記述します。 list(,,$chrome,)=$arrGoogle; このようにして、chrome 情報を削除できますが、リストがパラメータが配列と一致している 要素の数が同じ(値の前の数字)
c list関数の割り当てはインデックス順に値を割り当てます
4.各関数は配列を走査します
各関数は入力配列のキーと値のペアを返します
標準構文: array each(array input array)
戻り値: 4 つの値 0、1、キー、値を返します。0 とキーにはキー名が含まれ、1 と値には対応するデータが含まれます
それぞれを使用して配列を走査するサンプルコードは次のとおりです:
//各関数を使用して配列を走査します
$arrGoogle=array('google','Gmail','Chrome','Android');
//初めて each を使用して、現在のキーと値のペアを取得し、ポインターを次の位置に移動します
$arrG=each($arrGoogle);
//結果を印刷し、結果を明確に表示するために新しい行で囲みます
print_r($arrG);
「
」を印刷します;
$arrGmail=each($arrGoogle);
print_r($arrGmail);
「
」を印刷します;
$arrChrome=each($arrGoogle);
print_r($arrChrome);
「
」を印刷します;
$arrAndroid=each($arrGoogle);
print_r($arrAndroid);
「
」を印刷します;
//ポインタが配列の末尾にある場合、それぞれの関数を再度実行します。その場合、再度実行した結果は false を返します
。$empty=each($arrGoogle);
//ポインタが後方に移動し続けることができない場合は、false を返します
if($empty==false){
print 'ポインタは配列の最後にあり、後方に移動できないため、false を返します';
}
?>
注: この関数のパラメータと戻り値 (関数の実行前にポインタが配列の末尾にない場合) は両方とも配列です。関数の実行前に配列ポインタが配列の末尾にある場合は、戻り値が返されます。関数が再度実行されると、値は false になります
開始位置は最初の要素です。この関数が実行されるたびに (通常は)、ポインタは次のアドレスに戻ります。
5.key() は配列を走査しますそれぞれは配列を返すために使用されるキー名です
基本構文: 混合キー (配列 & 配列)
Key関数は次のように配列サンプルコードを走査します
//Androidyueによって設計されました
// key 関数を使用して配列を走査します
//連想配列を初期化します
$arrChina=array('a'=>'河北','b'=>'安徽','c'=>'北京','d'=>'広東','e'= >「上海」);
//インデックス配列を初期化しますが、キーを使用したインデックス配列は空の文字を返します
$arrCN=array('Hebei','Anhui','Beijing','Guangdong','Shanghai');//キーは配列の文字列添字を表示します。インデックス配列の場合は空の文字列です
//print_r($arrChina);
while($key=key($arrChina)){//連想配列の場合、key メソッドを使用できます
echo $key,'
次($arr中国);
}
print_r($arrCN);//インデックス配列を出力します
while($keyName=key($arrCN)){//ここで key 関数を呼び出して値を代入すると、while 条件が成立せず、{} 間の演算は実行されません
。
/*if(empty($keyName)){print 'キー名が空です
}*/
/*if($keyName=''){
print 'キー名が空です
}*/
var_dump($keyName);
}
//インデックス配列の key 関数の戻り値が変数の式のブール値に割り当てられていることを確認します
if(($KeyName=key($arrCN))==false){
「False」を出力します;
}
//インデックス配列で key 関数を呼び出し、変数に値を割り当てます
$keyName=key($arrCN);
next($arrCN);//配列ポインタを 1 つ後ろに移動します
次($arrCN);
次($arrCN);
次($arrCN);
次($arrCN);
$keyName=key($arrCN);
var_dump($keyName);//値と型情報を出力します
//エコー $keyName;
?>
注: key 関数のパラメーターは通常、インデックス配列の場合は意味がありません。
key 関数はポインタを移動しません。ここでは next 関数を呼び出します。next 関数はポインタを後方に移動するために使用されます。
6. ポインターを操作する関数を使用して配列を走査するリセット関数は、ポインターを配列の初期位置に戻すために使用されます。また、スクリプト内で配列を複数回表示および処理する必要がある場合、この関数はよく使用されます。仕分け終了
b.current() 関数
この関数は現在の配列ポインターの位置の値を返します。この機能には注意してください。
c end はポインタを配列の最後の位置に移動し、ターゲット位置の値を返します
d 次に、ポインタを 1 回後方に移動し、現在の位置が配列の最後の位置である場合、false を返します。
e prev はポインタを 1 回前に移動し、現在の位置が配列の開始位置の場合は false を返します。
//Androidyueによって設計されました
//reset メソッドの使用法 次のコードは、ポインターを制御する関数を呼び出します。ポインターを移動する操作は、各関数の結果に影響を与えることに注意してください。
//コードを簡略化するために、単純な配列を宣言します$arrGoogle=array('google','Gmail');
//各関数を呼び出すと、出力は配列改行を返します
echo(current($arrGoogle));//current 関数を使用して現在の値を出力します
echo (next($arrGoogle));//next 関数を呼び出し、次の値を出力します
$arrG=each($arrGoogle);
print_r($arrG);
「
$arrGmail=each($arrGoogle);
print_r($arrGmail);
「
$arrMore=each($arrGoogle);//ポインタが動き続けられない場合は false を返します
//print_r($arrMore);
//エコー $arrMore;
「
//ただし、出力を継続して上記のプロセスを繰り返す場合は、リセット関数を使用してポインタを開始位置にリセットし、上記の操作を繰り返します
リセット($arrGoogle);
echo(end($arrGoogle));//end 関数を呼び出してポインタを配列の最後の位置に移動し、値を返します
echo(prev($arrGoogle));// prev 関数を呼び出してポインタを前方に移動し、値を返します
$arrG=each($arrGoogle);
print_r($arrG);
「
$arrGmail=each($arrGoogle);
print_r($arrGmail);
「
?>
7.array_reverse()
この関数は、ターゲット配列の要素を反転します。preserver_key が true に設定されている場合、元のマッピングが維持されます。それ以外の場合、マッピングはリセットされます。
この機能を使用するサンプルコードは以下の通りです
$arrGoogle=array('Google','Gmail','Android','Chrome','Youtube');
エコー '
';</p> <p>「操作前の配列」を出力します;</p> <p>print_r($arrGoogle);</p> <p>$arrReversed=array_reverse($arrGoogle);//以前のマッピングを保持しません</p> <p>print 'preserving_key を使用しない逆順操作の結果';</p> <p>print_r($arrReversed);</p> <p>$arrReversedT=array_reverse($arrGoogle,1);//前のマッピングを保持します</p> <p>print '逆順操作のためにpreserver_keyをオンにした結果';</p> <p>print_r($arrReversedT);</p> <p>エコー'';
?>
8.array_flip()
この関数は配列のキーと値を交換します
以下はこの関数の使用コードです
//array_flip()関数の使い方
//インデックス配列を初期化します
$arrGoogle=array('Google','Chrome');
//連想配列を初期化します
$arrSohu=array('son'=>'Sogou','child'=>'Chinaren','search'=>'Sogou');//値が同じ場合、 array_flip() 関数は次のようになります。 array_flip() を使用した後、'son'=>'Sogou' と 'search'=>'Sogou' が同じ値になるように、同じ値を順番に上書きします。関数、それは【総合】検索です
//2つの配列に対してarray_flip()関数を呼び出して演算、出力するとどちらも正常に出力できます
print_r(array_flip($arrGoogle));
print '
$arrSogou は array_flip() 関数の操作前の配列です';
print_r($arrSohu);
print '
$arrSogou の array_flip() 関数操作なしの配列';
print_r(array_flip($arrSohu));
?>
9.array_walk関数
boolean array_walk(array input_array,コールバック関数[,混合ユーザーデータ])
array_walk() 関数は、パラメーター array_input の各要素をカスタム関数関数に渡して、array_input のキーと値のペアを実際に変更する場合は、各キーと値のペアを参照として渡す必要があります。機能
カスタム関数は 2 つの入力パラメータを受け入れる必要があります。1 つ目は配列の現在の値、2 つ目は配列の現在のキーです。array_walk 関数が 3 番目の値 userdata を与えるために呼び出された場合、その 3 番目の値は 3 番目になります。パラメータはカスタム関数に渡されます。
//Androidyueによって設計されました
//array_walk関数の使い方
//配列を初期化する
$arrCorperate=array('チャイナモバイル','チャイナユニコム','テレコム');
/*
関数: 配列内の値とユーザーが入力したパラメーターを連結して、文字列を結合する関数 (パラメーターが入力されていない場合は、デフォルトのパラメーター値が結合されます)
パラメータ: $value (カスタム)、配列に値を保存、$key 配列にキーを保存、$prefix はオプションのパラメータです。ユーザーは array_walk の 3 番目のパラメータを設定して値を割り当てる必要があります。 ()、ユーザーが値を割り当てない場合は、デフォルトを使用するか、必要に応じて選択します
注: ユーザーが値渡しによる参照を使用すると、配列の値が変更されます
*/
関数 linkString(&$value,$key,$prefix='cn'){
$value=$prefix.$value;//関数本体は文字列のスプライシングを実装します
}
array_walk($arrCorperate,'linkString');// array_walk() を使用して、カスタム関数に従って配列を操作します
//array_walk($arrCorperate,'linkString','China');//ここはカスタム関数のパラメーターを設定する 3 番目の場所です
print_r($arrCorperate)
?>
のfor、foreach、list、each、key、ポインタ操作関連関数、array_flip、array_reverse、array_walksなどの関数を中心に解説しています。