两个具有相同变量名的 foreach 循环破坏了元素的顺序

2024-02-07

这是我的代码:

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


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

最简单的修复方法是添加一个unset ($ad)紧接在第一个之后foreach这样 PHP 就不会考虑名称$ad从那时起的参考。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个具有相同变量名的 foreach 循环破坏了元素的顺序 的相关文章

随机推荐