web-dev-qa-db-ja.com

PHP foreachの「as $ key => $ value」と「as $ value」の違い

データベース呼び出しがあり、$key => $valueforeachループで何をするかを理解しようとしています。

私が尋ねる理由は、これらのコードは両方とも同じものを出力するためです。そのため、このように書かれている理由を理解しようとしています。コードは次のとおりです。

foreach($featured as $key => $value){
  echo $value['name'];
}

これは次と同じ出力をします:

foreach($featured as $value) {
  echo $value['name']
}

だから私の質問は、$key => $valueforeachループの$valueの違いは何ですか。それが違いを生む場合、配列は多次元です。foreachループで$key$valueに渡す理由を知りたいだけです。

53
handmdmr

さて、foreachループの$key => $valueは連想配列のキーと値のペアを指します。ここで、キーはインデックスとして機能し、0,1,2、...のような数値の代わりに値を決定します。PHPでは、連想配列はこのような:

$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);

PHPコードでは、$featuredはループ処理される連想配列です。as $key => $valueは、ループが実行され、配列からキーと値のペアが選択されるたびに、ローカルの$key変数にキーを格納することを意味しますループブロック内で使用し、ローカルの$value変数の値を使用します。したがって、上記の配列例では、foreachループは最初のキーと値のペアに到達し、as $key => $valueを指定した場合、'key1'$key変数に、'value1'$value変数に格納します。

ループブロック内で$key変数を使用しないため、追加または削除してもループの出力は変更されませんが、連想配列であることを示すためにキーと値のペアを含めることをお勧めします。

また、as $key => $valueの指定は任意です。それをas $foo => $barで置き換えることができ、ループブロック内の変数参照を新しい変数$fooおよび$barに変更する限り、正常に動作します。しかし、それらを$key$valueにすると、それらの意味を追跡するのに役立ちます。

75
djiango

次のような連想配列があるとしましょう:

$a = array(
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => array('x'=>123)
);

最初の反復:$key="one"および$value=1

値が必要な場合は、このキーが必要になることがありますが、使用を避けることができます。

最後の反復では$key='seventeen'および$value = array('x'=>123)なので、このarray値の最初の要素の値を取得するには、key、この場合はxが必要です:$value['x'] =123

16
Charaf JRA

非常に重要な場所必須foreachループでkey => valueペアを使用することに言及してください。 $features配列の既存のアイテム(別のキー)にnew/sub-要素を追加するとします。次のことを行う必要があります。

foreach($features as $key => $feature) {
    $features[$key]['new_key'] = 'new value';  
} 


これの代わりに:

foreach($features as $feature) {
    $feature['new_key'] = 'new value';  
} 

ここでのbigの違いは、最初のケースではkeyを使用してメイン配列自体を介して配列のサブ値にアクセスしていることです配列ポインタが現在指している要素。

2番目(はこの目的には機能しません)が、配列内のサブ値を一時変数$featureに割り当てています。ループ反復。

違いは

foreach($featured as $key => $value){
 echo $value['name'];
}

キーと値のペアから各反復の$keyの値を操作できます。 @djiangoが答えたように、各値の$keyを操作していない場合、ループの結果は次のようになります。

foreach($featured as $value) {
  echo $value['name']
}

出典:PHPドキュメント

最初の形式は、array_expressionで指定された配列をループします。反復ごとに、現在の要素の値が$ valueに割り当てられ、内部配列ポインターが1つ進められます(したがって、次の反復では、次の要素が表示されます)。

2番目の形式は、各反復で現在の要素のキーを$ key変数に追加的に割り当てます。


たとえば、操作するデータがカスタムキーを持つ配列である場合、次のように画面に出力できます。

$array = ("name" => "Paul", "age" => 23);

foreach($featured as $key => $value){
 echo $key . "->" . $value;
}

印刷する必要があります:

name->Paul

age->23

そして、foreach($featured as $value)で同じことをすることはできません。したがって、必要なときにキーを操作する便利な方法として上記の形式を検討してください。

乾杯

7
sargas

次のような配列があるとします:

$array = (0=>'123',1=>'abc','test'=>'hi there!')

Foreachループでは、各ループは次のようになります。

$key = 0, $value = '123'
$key = 1, $value = 'abc'
$key = 'test', $value = 'hi there!'

配列キーを知る必要がある場合に最適です。

3
aynber

配列が次のように見える場合:

  • $ featured ["fruit"] = "オレンジ";
  • $ featured ["fruit"] = "banana";
  • $ featured ["vegetable"] = "ニンジン";

$ keyは各配列値(オレンジ、バナナまたはニンジン)のタイプ(果物または野菜)を保持します

2
3seconds

ここに$ keyに含まれる$ key$ value in $ featuredに関連付けられています。違いは、そのキーを手に入れたことです。

array("thekey"=>array("name"=>"joe"))

ここ$ value

array("name"=>"joe")

$ keyは「thekey」です

1