美好的一天。面對一個問題,看起來像這樣: 我有一個變量,在循環中重置並重新填充。我將該變量賦值給其他變量,因爲它的屬性(如$ item-> subitems)。例如,我將$ item收集到$ items的數組中。 每個循環這個變量都被重新設置和重新填充,並且包含不同的數據。 近似示例代碼低於:PHP變量複製循環奇怪行爲
<?php
$seasons = array(1,2);
$ltabs= array(1);
$all = array(1,2,3,4,5,6,7,8,9,0);
foreach ($ltabs as $tab)
{
//Resetting an object instance
$itm=false;
//Re-Initing object
if (1==1)
{
$itm->height = 1;
$itm->width = 2;
}
else
{
$itm->height = 3;
$itm->width = 4;
}
//And thats where crap happens
//foreach($seasons as $season) //Dont work that way too
for ($y=0;$y<count($seasons);$y++)
{
//Re-initing local array for needed values
$itemz=array();
//$itm->items = array();
for($a=0;$a < count($all);$a++) {
if ($all[$a] % $seasons)//Not tested, supposed to gove ANY dofference in arrays.
{
$itemz[]=$all[$a];
}
}
$itm->items = $itemz;
$rtabs[$season] = $itm;
unset($itemz);
//unset($itemz);
}
}
//Returns crap.
var_dump($rtabs);
?>
但是,當我嘗試
<?php
foreach($rtabs as $itm)
{
var_dump($itm->items);
}
?>
我看到所有這些子項包含相同的一組數據。 我已經成功地通過在這個子循環中重新分配整個$ itm變量來打敗它。但我想undeerstand - 爲什麼這樣做? 根據this文章 - 垃圾收集器和PHP的寫時複製的事情應該初始化,當我重新設置這個$ itemz數組,所以對我所有這看起來很不起眼。 任何幫助,將不勝感激。
您的示例重現了錯誤嗎?如果沒有,請減少真實的代碼,直到你只剩下讓你描述的事情發生的代碼。在這樣做的過程中,有99%的機會會發現是什麼導致了它,因爲你沒有仔細檢查自己的代碼。 – 2013-05-11 23:45:25