PHPで配列を走査する方法はforeach、each、list、forなど色々ありますが、その中でも配列の走査においてはforeachが一番パフォーマンスが良いので私もよく使わせていただきます。配列を走査するための初心者向けの foreach の例を紹介します。
文法
foreach ( array_expression as $key => $value ) ステートメント
例 1:
コードは次のとおりです |
コードをコピー |
$color=array('白' => '白' ,
「黒」 => 「黒」 、
'赤' => '赤' ,
「緑」 => 「緑」、
'黄色' => '黄色');
foreach( $color as $c) echo $c ." ";
?>
|
要素の値だけでなく、キー名も foreach を通じて取得できます。構造形式は次のとおりです。
コードは次のとおりです
| コードをコピー
|
foreach( $color as $c) echo $c ." ";
または
foreach( $color as $key => $c) echo $key.$c ." ";
|
この方法と最初の方法の違いは、追加の $key があることです。つまり、現在の要素の値を $value に割り当てるだけでなく、現在の要素のキーの値も変数 $key に割り当てられます。各ループで。キー値には、添え字値または文字列を指定できます。たとえば、book[0] の「0」=1、book[id] の「id」==1。
foreach の使用に関するいくつかの問題について詳しく説明しましょう。
通常の状況では、foreach の $arr と $value($arr as $value) はコピーであり、外部要因の影響を受けません。
コードは次のとおりです
コードをコピー |
|
$arr = 配列(0,1,2,3,4,5);
foreach($arr as $value){
$arr = array();
エコー $value;
}
//12345
|
しかし、$arr が参照である場合、状況は異なります。問題を説明するためにコードを使用します。
コードは次のとおりです
コードをコピー
|
|
$arr = 配列(0,1,2,3,4,5);
$arr = &$arr;
foreach($arr as $value){
$arr = array();
エコー $value;
}
// 0
| これは、ループで使用される $arr が元のデータをコピーするのではなく、直接ポイントしているためです。
$value が参照であり、$arr が参照ではない場合、結果は同じになります。$value はコピーではなく元のデータを指します。
コードは次のとおりです
コードをコピー
|
|
$arr = 配列(0,1,2,3,4,5);
foreach($arr as &$value){
$arr = array();
エコー $value;
}
// 結果は: 0
別の特殊な状況があります。つまり、$arr がグローバル変数として定義されている場合、$arr も参照になります。
コードは次のとおりです
| コードをコピー
|
グローバル$arr;
$arr = 配列(0,1,2,3,4,5);
foreach($arr as $value){
$arr = array();
エコー $value;
}
// 結果は: 0
|
配列を 2 回ループする場合は、このように記述してはなりません
コードは次のとおりです
| コードをコピー
|
foreach($arr as &$value){}
foreach($arr as $value){}
|
これにより、2 番目のループの結果が不正確になります (おそらく、PHP のバグです)。次の代替手段を使用できます
コードは次のとおりです
| コードをコピー
|
//解決策 1
foreach($arr as &$value){}
unset($value);
foreach($arr as $value){}
//解決策 2
foreach($arr as &$value){}
foreach($arr as &$value){}
//解決策 3
foreach($arr as &$value){}
$arr2 = $arr;
foreach($arr2 as $value){}
|
foreachが未定義にならないようにするには、次のようにforeachを書いてみてください
コードは次のとおりです
| コードをコピー
|
foreach((array)$arr as $value) {}
|
|
http://www.bkjia.com/PHPjc/628708.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/628708.html技術記事 phpで配列を走査する方法はforeach、each、list、forなどたくさんありますが、その中でもforeachが配列の走査に最もパフォーマンスが良いので私もよく使っているので紹介させていただきます。以下...