首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foreach和unset()

Foreach和unset()
EN

Stack Overflow用户
提问于 2013-05-19 00:01:21
回答 2查看 1.6K关注 0票数 0

遇到了一个小问题,想知道是否有“最佳实践”的方法。

所以我刚刚了解到“一个php foreach将在整个数组上执行。测试取消设置下一个迭代中的值。它将在偏移量上迭代,但值将为null。- Kevin Peno Dec 22 '09 at 21:31”来自How do you remove an array element in a foreach loop?

这是第一部分,这让我很困惑。我正在使用foreach遍历一个数组。这是一个搜索函数,所以我删除了我刚刚搜索的元素,所以当循环再次运行时,它减去了那个元素。

如果可能的话,我不想重新建立索引,尽管如果有必要我可以这样做。

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [0] => a
        [1] => aa
        [2] => aaa
    )

[1] => Array
    (
        [0] => b
        [1] => bb
        [2] => bbb
    )

[2] => Array
    (
        [0] => c
        [1] => cc
        [2] => ccc
    )

[3] => Array
    (
        [0] => d
        [1] => dd
        [2] => ddd
    )

)

代码语言:javascript
复制
foreach($array as $key=>$value) {
   $searchresult[] = search function returns various other keys from array

   foreach($searchresult as $deletionid) {
      unset($array[$deletionid]);
   } 
}

因此,在第一次迭代中,它显然使用了$array,但$searchresults可能返回4,5,6,7,因此这些键从$array中删除。

但是foreach循环仍然会遍历这些数组,并返回一堆空数组。

我确实读过How does PHP 'foreach' actually work?,而且我也读到了一些。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-05-19 00:08:54

在我看来,删除基于索引的数组元素的最好方法是使用array_*函数集,比如array_diff和array_intersect (或者在您的情况下使用array_diff_key和array_intersect_key )。

代码语言:javascript
复制
$indexes_to_remove = array(2,3,4);
$indexes_to_remove = array_flip($indexes_to_remove);

$array = array_diff_key($array,$indexes_to_remove);
票数 1
EN

Stack Overflow用户

发布于 2013-05-19 02:45:28

如果数组肯定会在某一时刻耗尽,您可以使用以下命令:

代码语言:javascript
复制
while (true) {
    $searchresult[] = search function returns various other keys from array

    foreach($searchresult as $deletionid) {
        unset($array[$deletionid]);
    }
    if (count($array) === 0) {
        break;
    }
}

是的,我知道while (true)是非常邪恶的,但我发现在这样的情况下,它确实做了需要的事情。如果你想防止它的无限循环,你总是可以添加一个变量,每次迭代都递增,当它达到一个永远不会发生的高值时(如10 * count($array)),就执行break

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16626246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档