1

这是我的代码:

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 的名称,然后它工作正常,但我想知道发生了什么。

4

1 回答 1

4

发生的事情是第一个循环通过引用进行迭代,因此当第二个尝试将“当前项”分配给$ad它时,实际上除了更新之外还会更新您的数组内容$ad

最简单的解决方法是unset ($ad)在第一个之后立即添加一个,foreach以便 PHP 从那时起不会将该名称视为$ad引用。

这样做的需要(否则以后会遭受对引用的隐藏更新)是 PHP 中最丑陋的事情之一;就我个人而言,我非常热衷于unset在通过引用进行迭代后附加一个,即使这是函数中的最后一条语句。

于 2013-08-05T15:05:57.963 回答