2013-02-14 72 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