2013-02-14 137 views
1

我有一個名爲$products的數組,其中包含各種產品數據,以及一個名爲$discounts的數組,其中的鍵是產品物料號。當我遍歷$products我想定義一個局部變量,這將使訪問特定的折扣更容易,就像這樣:在PHP中覆蓋的變量

foreach ($products as $prod) { 
    $discount = $discounts[$prod->item_number]; 
    // do stuff 
} 

太多調試後,我已經確定,由於某些原因,上面的代碼導致$discounts的最後一項被上一項的內容覆蓋。

什麼可能會導致這種奇怪的現象,我怎麼能給$discounts[$prod->item_number]一個較短的名稱而不造成它?

+2

您是否在任何地方使用參考? – 2013-02-14 12:59:23

+0

你確定,$ discounts'的最後一項被覆蓋,而不是'$ discount'?在這種情況下,'$ discount'總是被新的var覆蓋,因爲它只是一個正常的var。 – sascha 2013-02-14 13:00:30

+0

我已經從字面上刪除了除該行之外的整個循環,然後在每次迭代中轉儲整個$ discounts數組。第二次迭代以某種方式覆蓋最後一項「$ discounts」的內容。 – Tal 2013-02-14 13:09:04

回答

2

每當發生這種奇怪的事情時,我總是確保Register Globals沒有在服務器上「意外」啓用。我看不出爲什麼你的引用代碼會導致$ discounts數組被修改。 Register Globals已啓用,或者您在其他地方搞亂了。

+0

我投「你搞亂了別的地方」 – 2013-02-14 13:03:49

+0

如果我理解了這個註冊全局變量,那麼它可能不是這裏的罪魁禍首,因爲'$ discounts'在循環迭代過程中發生了變化。 – Tal 2013-02-14 13:13:38

+0

使用代碼檢查:if(ini_get('register_globals')== 1){echo'ON'; } – 2013-02-14 13:18:08