2016-12-16 67 views
1

我有這種非常非常基本的代碼改變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是含有其它陣列的陣列。現在,您可以看到,我在第一個循環中修改了formatted_results中每個數組的值以包含名稱joe,然後我將其打印以確保並確保第一個循環的打印返回「joe」

但是,我設置的值並不是持久的,因爲當我再次循環同一個數組以檢查它自己的數組的內部值時,它給了我舊的值。

代碼和我在這裏顯示的完全一樣,兩者之間沒有任何內容。我猜測這裏有一些關於指針的東西。

+0

因爲在你沒有設置其他的foreach「喬「作爲'$ 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

完美的,謝謝(你回答如此之快,以至於我把它設置爲答案之前,我已經等待了很久)但是請注意向我解釋究竟是什麼?在哪些情況下我可以使用它? –

+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! 
     } 

$結果是不會將數據保存到$ formatted_results