ホームページ > バックエンド開発 > PHPの問題 > PHPのforeachループで元の配列を変更する方法

PHPのforeachループで元の配列を変更する方法

青灯夜游
リリース: 2023-03-16 21:56:02
オリジナル
3323 人が閲覧しました

PHP では、参照ループを使用するには foreach ステートメントのみが必要で、その後、ループ本体で元の配列を操作 (変更) すると、元の配列自体に影響します。構文「foreach ($array as &$)」 value )//ループ本体ステートメント ブロック;}」または「foreach ($array as $key => &$value){//ループ本体ステートメント ブロック;}」。

PHPのforeachループで元の配列を変更する方法

このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、DELL G3 コンピューター

foreach は、トラバース用に特別に設計されたステートメントです。 arrays は、配列を走査するときに一般的に使用されるメソッドであり、配列の走査に非常に便利です。PHP5 以降では、オブジェクトも走査できるようになりました (foreach は配列とオブジェクトにのみ適用できます)。

foreach ステートメントは、配列の添字に関係なく配列を走査し、不連続なインデックス配列や文字列を添字として持つ連想配列に使用できます。

#foreach ステートメントには 2 つの構文形式があります:

文法形式 1:

foreach ($array as $value){
    //循环体语句块;
}
ログイン後にコピー

  • 指定された $array 配列を走査し、各ループで現在の配列の値を $value に割り当てます。

構文形式 2:

foreach ($array as $key => $value){
    //循环体语句块;
}
ログイン後にコピー

  • 指定された $array 配列をトラバースし、各ループで値を取得します。現在の配列の が $value に割り当てられ、キー名が $key に割り当てられます。

説明:

foreach ステートメントがループすると、配列内のポインタが 1 ステップ前に移動し、次のループで次の配列要素が取得されます。走査を停止し、配列の最後に到達するまでループを終了します。

foreach ループで元の配列を変更する

通常、foreach ステートメントを使用して配列を走査する場合、配列のバックアップは通常、アレイ自体には影響しません。

例: ループ内で配列を変更し、ループ外で配列にアクセスすると、配列が変更されていないことがわかります

<?php
header("Content-type:text/html;charset=utf-8");
$array= array(1,2,3,4,5,);
echo "原数组:";
var_dump($array);
foreach ($array as $value) { 
    $value = $value*2;  // 元素值乘以2
}
echo "foreach处理后的数组:";
var_dump($array);
?>
ログイン後にコピー

PHPのforeachループで元の配列を変更する方法

2 つの出力も同様に、配列要素は変更されていないことがわかります。この時点では、foreach ループ内の元の配列への変更は無効です。

しかし、場合によっては foreach ループを通じて配列を変更する必要がある場合、どうすればよいでしょうか?

参照サイクルを使用できます (つまり、

$value の前に & を追加します。これにより、foreach ステートメントは、値の代わりに参照によって値を割り当てます)。値をコピーするなど)、ループ本体内の元の配列に対する操作は、元の配列自体に影響を与えます。

<?php
header("Content-type:text/html;charset=utf-8");
$array= array(1,2,3,4,5,);
echo "原数组:";
var_dump($array);
foreach ($array as &$value) { 
    $value = $value*2;  // 元素值乘以2
}
echo "foreach处理后的数组:";
var_dump($array);
?>
ログイン後にコピー

PHPのforeachループで元の配列を変更する方法

配列の要素が変更され、要素の値が 2 倍になっていることがわかります。


しかし、最後の要素の前に余分な

& があります。これの何が問題なのでしょうか?削除するにはどうすればよいですか?

これは、配列の最後の要素の

$value 参照が foreach ループ後に残るためです。出力する前に unset() を使用して配列を破棄する必要があります。

unset($value); // 最后取消掉引用
var_dump($array)
ログイン後にコピー

PHPのforeachループで元の配列を変更する方法

& シンボルが消えました。

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPのforeachループで元の配列を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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