2016-12-16 12 views
1
私はこの非常に非常に基本的なコードformatted_resultsは他の配列を含む配列である

PHP配列値

foreach ($formatted_results as $result) { 
      $result['profile_pic']="joe";//set all values to joe 
       var_dump($result['profile_pic']);//prints joe 
     } 
    foreach ($formatted_results as $result) { 

       var_dump($result['profile_pic']);//does not print joe! 
     } 

を有する

を変えます。ここで見てきたように、最初のループでformatted_results内の各配列の値をjoeという名前に変更してから、それを印刷して最初のループのprintが "joe"を返します。

しかし、私が設定した値は、同じ配列をループして自身の配列の内側の値をチェックすると、元の値になります。

コードはここに表示されているとおりですが、間には何もありません。私はここで私を逃れているポインタについて何かがあると思います。

+0

へのデータ保存つもりではありません"value for' $ result ['profile_pic'] ' –

+1

配列要素に加えられた変更を反映するために、参照演算子 '&'を使う必要があります。 'foreach($ formatted_results as&$ result)'は動作します。 – Perumal

答えて

4

値は実際のarrayに設定されておらず、ループ外では使用できない現在の要素に割り当てられています。ループしている実際のarrayに値を設定する必要があります。試してみてください - ここでは

foreach ($formatted_results as &$result) { 
    $result['profile_pic']="joe";//set all values to joe 
} 

foreach - Pass by reference

+0

パーフェクト、ありがとう(私は答えとしてそれを設定する前に、私は非常に速いstackoverflowは私が待っていると答えた)しかし、正確に&私に説明する気に?そして、私はそれを使用するshoudl場合? –

+1

@JoeYahchouchi行ってください - http://php.net/manual/en/language.references.php –

3

コードは次のとおりです。

foreach ($formatted_results as $k => $result) { 
      $formatted_results[$k]['profile_pic']="joe";//set all values to joe 
       var_dump($formatted_results[$k]['profile_pic']);//prints joe 
     } 
    foreach ($formatted_results as $result) { 

       var_dump($result['profile_pic']);//does not print joe! 
     } 

$結果があるので、あなたが「ジョーを設定していない他のforeachの中で$ formatted_results