2013-08-28 16 views
35

私はデータベースコールを持っていて、foreachループで何が行われているのかを調べようとしています。

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

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

これは、同じ出力:

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

をだから私の質問は、$key => $valueまたはちょうど$valueforeachループ内での違いは何であるか、です。違いがある場合、配列は多次元です。をループの$valueに渡す理由を知りたいだけです。ここ

+0

[PHP配列](http://php.net/manual/en/language.types.array.php)と[foreach](http://php.net/manual/en/control-structures .foreach.php)。あなたの例では、foreach内で '$ key'を使用しないので、より単純なバージョンに進むこともできます。 –

+0

配列は以下のようになります: 'Array( [0] => Array([id] => 7 [name] =>シュー2 [thumbnail] => /images/dummy-thumb.jpg) [1][2] => Array([id] => 9 [name] => 1)[=> 1 [name] =>ゲーム1 [サムネイル] => /images/dummy-thumb.jpg) Shock 2 [thumbnail] => /images/dummy-thumb.jpg) ) '' $ key'は '' [0] [1] [2] ''と '$ value''は' [id] [name] [サムネイル] '正しい? – handmdmr

答えて

56

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

PHPコードで
$featured = array('key1' => 'value1', 'key2' => 'value2', etc.); 

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

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

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

+3

ありがとう、これは私が探していた答えです。ループブロックの中で '$ key'を使わずにこの方法で使われているのを見たら私は混乱します。連想配列であることを表現するために使用するだけです。ループと配列の仕組みを理解しました。 '$ key'変数を使わなければ、なぜこの方法で使われたのではないのですか?私は '$ key' varを使ってそれが何を返すのか見て回っています。もう一度ありがとう:) – handmdmr

+0

問題はありません!お役に立てて嬉しいです。 – djiango

1

$キー$で$値に関連付けられた$キーを特色に含まれています。違いは、今あなたはその鍵を持っているということです。

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

ここ$値

array("name"=>"joe") 

$キーは連想配列で、キーと値のペアを指し、 "thekey"

3

は、あなたがこのような配列があるだろう:あなたのforeachループでは

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

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

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

あなたは配列のキーを知っておく必要がある場合には、それらの時のために素晴らしいことです。

+0

したがって、 '$ key'を知る必要がある場合にのみループをこのように設定します。これはcodeigniterのモデルの関数から来ているためです。だから後で '$ key'が必要になるかもしれません。 – handmdmr

+0

正しい。キーを使用して配列内のそのキーの値を変更することも、同じキーを使用して別の配列にデータを追加することもできます。 – aynber

2

配列は次のようになります場合:

  • 特色$ [ "フルーツ"] = "オレンジ"。
  • $特色["fruit"] = "banana";
  • $ ["vegetable"] = "carrot";

$キーは各配列値のために(オレンジ、バナナやニンジンを)タイプ(果物や野菜)を開催します

14

のは、あなたがこのような連想配列を持っているとしましょう:

$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

+0

ちょうどその電球を私の頭の上に来るようにしました:ありがとう:) – handmdmr

+0

この答えを解決して、感謝としてマークしてください:) –

+0

私はこの説明が好きでしたが、値を欲しいのではなく、 – Nmaster88

5

違いは

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

にあなたは彼らのキーと値のペアから各反復の$keyの値を操作することができることです。 @djiangoはあなたがそれぞれの値の$keyを操作していない場合、ループの結果は

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

ソースとまったく同じになり、答えのように: あなたはPHP Documentationからそれを読むことができます:

最初の形式は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)と同じようにすることはできません。上記のフォーマットは、必要なときにキーを操作する便利な方法です。それはforeachループでkey => valueペアを使用するREQUIREDある

乾杯

+0

答えのどれよりももっと理にかなった男の子、今私はこれの背後にある全てのアイデアを得ます:Dよく、少なくとも種類:D長く長く繁栄している私の友人 –

8

非常に重要な場所が言及されるべきです。 $features配列の既存の項目(別のキー)に新規/サブ -elementを追加するとします。あなたは、次の操作を行う必要があります。

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


の代わりにこの:

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

ここ大きな差が最初のケースでは、メインを経由して、アレイのサブ値にアクセスしている、ということです配列ポインタによって現在指し示されている要素へののキーの配列自体を返します。

(この目的機能しない)第二には、各ループ反復の後に設定されていない一時的な変数$featureに、アレイ内のサブ値を代入しているが。

関連する問題