ホームページ  >  記事  >  バックエンド開発  >  PHP配列におけるforeach配列トラバーサルの使用例を詳しく解説(画像)

PHP配列におけるforeach配列トラバーサルの使用例を詳しく解説(画像)

黄舟
黄舟オリジナル
2017-05-04 11:48:047046ブラウズ

配列を走査するための foreach とは何ですか?

foreach を使用して配列を走査するとき、概念が不明瞭なために間違いを犯すことがよくあります。ここでは、一般的に使用される foreach 操作について簡単に紹介します。

(PHP 4、PHP 5、PHP 7)

foreach 構文構造は、配列を走査する簡単な方法を提供します。 foreach は配列とオブジェクトにのみ適用できます。他のデータ型の変数、または初期化されていない変数に適用しようとすると、エラー メッセージが表示されます。

配列を走査するための foreach の 2 つの構文:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

最初の形式は、指定された array_expression 配列を走査します。 各ループでは、現在のセルの値が $value に割り当てられ、配列内のポインターが 1 ステップ前に進みます (つまり、次のループで次のセルが取得されます)。

2 番目の形式でも同じことを行いますが、現在のユニットのキー名が各ループの変数 $key にも割り当てられる点が異なります。

PHP 5 以降、オブジェクトをトラバースすることも可能です。

注: foreach の実行が開始されると、配列内のポインターは自動的に最初のユニットを指します。これは、foreach ループの前にreset()を呼び出す必要がないことを意味します。

注: 配列が参照されない限り、foreach は配列自体ではなく、指定された配列のコピーを操作します。 foreach は配列ポインターにいくつかの副作用をもたらします。リセットされない限り、foreach ループ中またはループ後に配列ポインターの値に依存しないでください。

PHP 5 以降では、$value の前に & を追加することで配列の要素を簡単に変更できます。このメソッドは、値をコピーするのではなく、参照によって割り当てます。

<?php
header("Content-Type:text/html; charset=utf-8");
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // 最后取消掉引用
?>

$value への参照は、走査される配列が参照できる場合 (たとえば、変数である場合) にのみ使用できます。次のコードは実行されません:

<?php
foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}
?>

注: 配列の最後の要素の $value 参照は、foreach ループの後も保持されます。 unset() を使用して破棄することをお勧めします。 foreach は、「@」を使用してエラー メッセージを抑制する機能をサポートしていません。

以下は、php foreach が配列を走査する例です

1。走査される配列は 1 次元配列であり、これは比較的単純です。単一の配列の場合は、次のように 2 つの方法で表現されます。

<?php
header("Content-Type:text/html; charset=utf-8");
$array = array("PHP中文网","百度","搜狗","www.php.cn");
foreach ($array as $value){
    echo $value."<br>";
}
echo "<br>";
foreach ($array as $key =>$value){
    echo $key."--".$value."<br>";
}
?>

出力結果は、

PHP配列におけるforeach配列トラバーサルの使用例を詳しく解説(画像)

2 となります。 1 次元の連想配列の場合は、次のように表示されます。キーの値が異なること:

<?php
header("Content-Type:text/html; charset=utf-8");
$array = array("网站1"=>"PHP中文网","网站2"=>"百度","网站3"=>"搜狗","网址"=>"www.php.cn");
foreach ($array as $value){
    echo $value."<br>";
}
echo "<br>";
foreach ($array as $key =>$value){
    echo $key."--".$value."<br>";
}
?>

Traversing 結果は:

PHP配列におけるforeach配列トラバーサルの使用例を詳しく解説(画像)

3. 2次元配列を走査する場合、このときの値は配列です。 、そこから配列を操作するさまざまな方法を導き出すことができます。まず基本的な 2 次元配列を走査しましょう:

<?php
header("Content-Type:text/html; charset=utf-8");
$array = array(
    array("1","PHP中文网"),
    array("2","www.php.cn"),
    array("3","百度"),
    array("4","搜狗")
);
foreach ($array as $value){
    print_r($value);
    echo "<br>";
}
?>

走査結果は次のとおりです:

PHP配列におけるforeach配列トラバーサルの使用例を詳しく解説(画像)

配列を走査するときは、キーの値に注意し、それを混同しないでください。配列 ID 値;

<?php
header("Content-Type:text/html; charset=utf-8");
$array = array(
    array("1","PHP中文网"),
    array("2","www.php.cn"),
    array("3","百度"),
    array("4","搜狗")
);
foreach ($array as $key =>$value){
    echo "key =".$key."<br>";
    print_r($value);
    echo "<br>";
}
?>

走査結果は次のとおりです:

PHP配列におけるforeach配列トラバーサルの使用例を詳しく解説(画像)

また、2 次元配列の特定の列を 1 次元配列に変更する要求がよくあります。 for ループを使用する場合、値のフィールドを取り出して 1 次元配列に配置する必要があります。操作は比較的面倒ですが、次のように、現在の ID 列と名前列を取得します。配列を作成し、それぞれ 1 次元配列に格納します:

<?php
header("Content-Type:text/html; charset=utf-8");
$array = array(
    array("id"=>"1","name"=>"PHP中文网"),
    array("id"=>"2","name"=>"www.php.cn"),
    array("id"=>"3","name"=>"百度"),
    array("id"=>"4","name"=>"搜狗")
); //二维数组定义
//获取某一列作为一维数组
$idArr = array();//id列
$nameARR = array();//name列
foreach($array as $key => $value){
    $arr = $value["id"];
    $idArr =$arr;  //存入ID列
    $name = $value["name"];
    $nameARR = $name;  //存入name列
    print_r($idArr);
    print_r($nameARR);
}
?>

走査結果は次のとおりです:

PHP配列におけるforeach配列トラバーサルの使用例を詳しく解説(画像)


【関連チュートリアルの推奨事項】

1. 推奨される関連トピック: 「

php array (Array)」 "

2. おすすめの関連ビデオコース: "

foreach ループを使用して走査する: インデックス配列と連想配列"


以上がPHP配列におけるforeach配列トラバーサルの使用例を詳しく解説(画像)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。