配列で提供される情報は、値のタイプとそのサイズが異なり、要素の数を常に事前に決定できるとは限りません。最新のプログラミング、特に分散バージョンでは、複雑なデータ構造を作成できます。その内容とプロパティは、さまざまなアクションまたはイベントのシーケンスの結果として、不特定の時点で動的に決定できます。
開発段階で操作プロセスを予測し、情報の表示と使用、それらの外観と使用のダイナミクスのすべての可能なオプションを想定することが常に可能であるとは限りません。
コンテンツループ構文
foreach構文を定式化するために、PHPは2つを提案しました要素にアクセスするためのオプション。どちらもキータイプまたは値タイプに依存せず、通常のループでエミュレートできます。配列を要素のコレクションと見なすことを提案します。その数は最初は決定されていません。アレイは、キーの有無にかかわらず、その場で形成できます。要素は配列から削除することができ、キーはデフォルトで連想して形成することができます。
foreach($ aArrayName as $ xValue){ループ本体}
このような構造では、PHPのforeachループが必要になります行のすべての要素を通過します。ループの本体では、$ xValue変数は、$ aArrayName配列のすべての値を追加された順序で順番に取得します。アイテムのキー値は使用できません。
foreach($ aArrayName as $ xKey => $ xValue){ループ本体}
ここでも、foreachコンストラクトPHPを実行します配列の内容全体をスキャンしますが、ループの本体では、$ xValue変数と$ xKey変数(要素キー)の両方が、対応する値をペアで受け取ります。
要素のシーケンス
foreach PHPの内部では、要素が追加された順序ですが、配列の形成中に追加/削除が繰り返され、キーがあるものとないものが追加された場合は、配列の位置からではなく、配列を操作するのが最善です。要素のシーケンスですが、その内容またはキーに基づいています。
さまざまな客観的な理由でアレイ内のシーケンスは従わないか、重要ではないかもしれませんが、とにかくガイドされるべきではありません。単純なタスクでは、些細なデータセットでは問題はなく、アルゴリズムは順次処理用に構成できますが、配列の作成/編集のプロセスに多くの要因が影響する場合は、コンテンツに焦点を当てる必要があります。
現代の「正しい」要素
独自の概念の観点から、そのような言語を考慮せずに、PHP foreach配列は、実際の特定のタスクを考慮して、独立して設計する必要があります。
与えられたものがあり、与えられたものが特定の基準に従って類似したものの一般的なコレクションにインデックスを持っている場合の練習、- それは昨日でした.
インデックスがキーになり、配列は次の形式になりました連想配列。つまり、キーはシーケンシャルな一意性を失い(通常はシーケンシャル:0、1、2、... n)、値にもなりましたが、実際の値(つまり、キー)に関連付けられた単純な値(つまり、キー)になりました。つまり、要素のコンテンツ)。 これは今日です、これは正しいですが、完璧ではありません.
これが、PHPがforeachループを通常の配列に向けられた通常のループの代替と見なす理由です。これはまず第一に、これは非常に重要なことです。 配列要素の真の正しさだけでなく、彼らの鍵!
正しい要素の正しい配列
最初に要素があり、次に2つの要素がありました...したがって、要素の配列が表示され、それらの配列をループします。
for($ i = 0; $ i <count($ aArrayName); $ i ++){
各$ aArrayName [$ i]の処理本体
}
次に、顔のない0、1、2、... nの代わりに、要素に独自の名前(キー、配列が関連付けられ、foreachループが必要)が付けられました-「各ループ」:
foreach($ aArrayName as $ xKey => $ xValue){
同じ$ aArrayName [$ xKey]または$ xValueの各処理本体
}
今、正しい要素が配列に来るべき時が来ました、つまり、それ自体にあるもの。彼ら自身がインデックス、コンテンツ、シーケンス内の位置を知っています。シーケンスの独自の選択を明示し、これらすべての機能をそれらを含む実際の配列に委任する傾向があります。
そのような正しい配列が処理されますそれ自体で。通常のループとそれぞれにループを使用する特別な必要はありません。正式には、構文とセマンティクスはすでにこれを許可しています。問題は開発者の意識の慣性の背後にあるだけです。