php 在迭代时从数组中取消设置。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 在迭代时从数组中取消设置。相关的知识,希望对你有一定的参考价值。

<?php

// Method 1 - BAD
$toDelete1 = [0, 1]; // if it's for example [0, 2] so there is no problem
$list1 = new ArrayObject([0, 1, 2, 3, 4, 5, 6]);

foreach ($list1 as $key1 => $item1) {
    if (in_array($item1, $toDelete1)) {
        unset($list1[$key1]);
    }
}

echo count($list1) . PHP_EOL; // 6, should be 5

// Method 2 - OK
$toDelete2 = [0, 1];
$list2 = new ArrayObject([0, 1, 2, 3, 4, 5, 6]);

$iterator2 = clone $list2;
foreach ($iterator2 as $key2 => $item2) {
    if (in_array($item2, $toDelete2)) {
        unset($list2[$key2]);
    }
}

echo count($list2) . PHP_EOL; // 5, ok

// Method 3 - OK
$toDelete3 = [0, 1];
$list3 = new ArrayObject([0, 1, 2, 3, 4, 5, 6]);

$indexToDelete3 = [];
foreach ($list3 as $key3 => $item3) {
    if (in_array($item3, $toDelete3)) {
        $indexToDelete3[] = $key3;
    }
}

$iterator3 = $list3->getIterator();
foreach ($indexToDelete3 as $key3 => $index3) {
    $iterator3->offsetUnset($index3);
}

echo count($list3) . PHP_EOL; // 5, ok

以上是关于php 在迭代时从数组中取消设置。的主要内容,如果未能解决你的问题,请参考以下文章

迭代Java时从数组中删除对象

在迭代python时从剩余数组中找到2个元素的最小差异

如何在迭代字典时从字典中删除项目?

如何在迭代时从地图中删除?

如何在迭代时从 HashMap 中删除键? [复制]

迭代时从 HashSet 中删除元素 [重复]