美好的一天。面对一个问题,看起来像这样: 我有一个变量,在循环中重置并重新填充。我将该变量赋值给其他变量,因为它的属性(如$ 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