ホームページ バックエンド開発 PHPチュートリアル for ループ構造と foreach ループ構造の違いは何ですか?

for ループ構造と foreach ループ構造の違いは何ですか?

Jun 22, 2017 pm 03:29 PM
foreach 違い サイクル 構造

配列の走査は、プログラミングで最も一般的な方法です。ここでは、for と foreach の 2 つのメソッドについて説明します。これら 2 つのメソッドを使用して走査を実行するにはシナリオが多すぎます。ここでは、例として次の 2 つの配列についてのみ説明します。いわゆる「チューブを通してヒョウを見る」ことで、この 2 つの違いがある程度明確になります。

まず、トラバーサル用に 2 つの配列を準備します:

$arr1=array(1=>'a', 3=>22, 5=>'b', 4=>'c', 8=>'d');

$arr2=array('a'=>'aaa', 'b'=>'bbb', 'c'=>'ccc', 'd'=>'ddd', 'e'=>'eee');
ログイン後にコピー

1 つ:

for ループ 構造

ループ 1:

<?php
for($i=0,$num=count($arr1);$i<$num;$i++){
    echo $arr1[$i].' ';
}
?>
ログイン後にコピー

出力結果:

a 22 c
ログイン後にコピー

ループ 2:

<?php
for($i=0,$num=count($arr2);$i<$num;$i++){
    echo $arr2[$i].' ';
}
?>
ログイン後にコピー

このステートメント 出力はありません

分析:

ループ 1 は配列 $arr1 の最初の 2 ユニットのみを出力しますが、ループ 2 の $arr2 は何も出力しません。

その理由は、for ループが数値によってインクリメントされるためです。そのため、for はキーが数値である配列にのみアクセスできるため、たとえば、ループ 1 は $i=0 から $i=4 を使用して、キーが含まれる $arr1 配列に増分アクセスします。セルは 0 ~ 4. ですが、配列内のキーは 1、3、5、4、8 です。 count($arr1)=5 であるため、最終出力は $i<5; となるため、キー値が 4 (5=>'b',8=>'d') を超える配列ユニットにはアクセスされません。結果のみ: a 22 c; $arr2 のすべてのキーは数値ではなく文字であるため、ループ 2 には出力はありません。

2: foreach ループ構造

ループ 3:

&lt;?php
foreach($arr1 as $key=&gt;$value){
    echo $key.&#39;=&gt;&#39;.$value.&#39; &#39;;
}
?&gt;
ログイン後にコピー

出力結果:

1=&gt;a 3=&gt;22 5=&gt;b 4=&gt;c 8=&gt;d
ログイン後にコピー

ループ 4:

&lt;?php
foreach($arr2 as $key=&gt;$value){
    echo $key.&#39;=&gt;&#39;.$value.&#39; &#39;;
}
?&gt;
ログイン後にコピー

出力結果:

a=&gt;aaa b=&gt;bbb c=&gt;ccc d=&gt;ddd e=&gt;eee
ログイン後にコピー

分析:

foreach ループ構造は、ポイントに従ってループしますえー、中でarray はい、foreach の実行が開始されると、配列内のポインターは自動的に最初のユニットを指します。したがって、次のユニットは次のループで取得され、配列キーに従って配列全体を走査する必要はありません。これは foreach と for の違いでもあります。もちろん、foreach は配列とオブジェクトでのみ使用できます。また、foreach は内部配列ポインターに依存しているため、ループ内でその値を変更すると、予期しない

動作 が発生する可能性があります。

注: for の各ループは、対応する

index の下の値を操作し、各値への変更は、トラバースされたオブジェクトにも反映されます。 foreach がユニットを操作するたびに、そのインデックスと値をそれぞれ変数に取り込むか、値のみを 1 つの変数に取り出して、走査されるオブジェクト自体に影響を与えることなく、インデックスと値を使用して変数を個別に操作します。トラバーサル プロセス中にオブジェクトの値を変更する場合は、宣言内の変数の前に & 記号を追加する必要があります。例: foreach($array as &$value)。

結論: 配列が配列ユニットのキーとして連続する番号を使用する場合、for ループ構造を使用できます。配列のキーまたは配列のキーに文字が含まれているかどうかが不明な場合は、foreach ループ構造を使用する必要があります。

以上がfor ループ構造と foreach ループ構造の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ビットコインには株式がありますか? ビットコインには株式がありますか? Mar 03, 2025 pm 06:42 PM

ビットコインには株式がありますか?

Deepseek R1とV3バージョンの違いは何ですか Deepseek R1とV3バージョンの違いは何ですか Feb 19, 2025 pm 03:24 PM

Deepseek R1とV3バージョンの違いは何ですか

DeepSeek使用のためのFAQの概要 DeepSeek使用のためのFAQの概要 Feb 19, 2025 pm 03:45 PM

DeepSeek使用のためのFAQの概要

市場前取引とアフターマーケット取引の違いは何ですか?市場前と市場外の取引の違いの詳細な説明 市場前取引とアフターマーケット取引の違いは何ですか?市場前と市場外の取引の違いの詳細な説明 Mar 03, 2025 pm 11:54 PM

市場前取引とアフターマーケット取引の違いは何ですか?市場前と市場外の取引の違いの詳細な説明

なぜビテンサーはAIトラックの「ビットコイン」と言われているのですか? なぜビテンサーはAIトラックの「ビットコイン」と言われているのですか? Mar 04, 2025 pm 04:06 PM

なぜビテンサーはAIトラックの「ビットコイン」と言われているのですか?

韓国のビットコインと国内のビットコインに違いはありますか? 韓国のビットコインと国内のビットコインに違いはありますか? Mar 05, 2025 pm 06:51 PM

韓国のビットコインと国内のビットコインに違いはありますか?

Pepeは大規模に購入して売り切れ、Mutmは2025年により賢い投資ですか? Pepeは大規模に購入して売り切れ、Mutmは2025年により賢い投資ですか? Mar 03, 2025 pm 07:09 PM

Pepeは大規模に購入して売り切れ、Mutmは2025年により賢い投資ですか?

垂直プロキシ:アプリケーションシナリオと暗号化の破壊的可能性の解釈ネイティブプロキシ 垂直プロキシ:アプリケーションシナリオと暗号化の破壊的可能性の解釈ネイティブプロキシ Mar 04, 2025 am 10:21 AM

垂直プロキシ:アプリケーションシナリオと暗号化の破壊的可能性の解釈ネイティブプロキシ

See all articles