这是我的代码:
foreach($datawallright['adds'] as &$ad){
$ad['img'] = get_ad_pic_url($this->em->getReference("models\MmAds",$ad['id']),'/crop_');
$ad['description'] = ucfirst(strip_tags(html_entity_decode(mb_strtolower(str_replace(array("___","---"),"",$ad['description']), "UTF-8"))));
$ad['titleurl'] = title_url($ad['title']);
}
foreach($datawallright['adds'] as $ad){
$this->load->view("view_wallpage_add",array("ad"=>$ad,"isuserwall"=>$isuserwall));
}
我有两个for循环遍历同一个数组。在这两个for循环中分配的变量是相同的。奇怪的是当它遍历第二个for循环时。第一个n-1元素是正确的,但在最后一个元素的位置,前一个元素是前一个元素。我可以在一个for循环中完成所有操作。我可以更改变量$ ad的名称,然后它可以正常工作,但我想知道发生了什么。
答案 0 :(得分:4)
第一个循环是通过引用进行迭代的,所以当第二个循环尝试将“当前项目”分配给$ad
时,除了更新$ad
之外,它实际上还会更新您的数组内容。
最简单的解决方法是在第一个unset ($ad)
之后立即添加foreach
,以便PHP从那时起不会将名称$ad
视为引用。
需要这样做(或者稍后会对引用进行隐藏更新)是PHP中最丑陋的事情之一;我个人非常虔诚地在通过引用迭代后附加unset
,即使这是函数中的最后一个语句。