📜  如何删除foreach循环中的数组元素?(1)

📅  最后修改于: 2023-12-03 14:52:09.117000             🧑  作者: Mango

如何删除foreach循环中的数组元素?

你是否曾经遇到过需要在 foreach 循环中删除数组元素的情况?或者你尝试过直接在 foreach 循环中使用 unset() 函数但最后却发现并没有真正删除掉数组元素?

这是因为在 foreach 循环中,PHP 会把原数组复制一份,之后再对这份副本进行遍历。因此直接在 foreach 循环中删除数组元素,不会影响原数组,只会影响副本数组。

那么如何真正有效地在 foreach 循环中删除数组元素呢?

我们可以使用普通的 for 循环来删除数组元素,因为 for 循环是对原数组进行操作,不涉及到副本数组。

下面是一个在 foreach 循环中删除数组元素的错误示范:

<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
foreach ($arr as $key => $value) {
    if ($value == 'c') {
        unset($arr[$key]);
    }
}
print_r($arr); // 输出结果:Array ( [0] => a [1] => b [3] => d [4] => e )

我们期望输出的结果是 $arr 数组中没有值为 'c' 的元素,但实际上数组中任然存在索引为 2 的值为 'c' 的元素。

下面是一个使用 for 循环来删除数组元素的正确方法:

<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
for ($i = 0; $i < count($arr); $i++) {
    if ($arr[$i] == 'c') {
        unset($arr[$i]);
    }
}
$arr = array_values($arr); // 重置数组的索引
print_r($arr); // 输出结果:Array ( [0] => a [1] => b [2] => d [3] => e )

我们使用普通的 for 循环来遍历数组,并使用 unset() 函数来删除符合条件的元素。在删除元素后,我们需要使用 array_values() 函数将数组的索引重新从 0 开始排列。最后我们输出了删除元素后的数组,可以看到原数组中值为 'c' 的元素已经成功删除。

注意:在使用 for 循环时,我们需要使用 count() 函数来获取数组的长度,因为这是 PHP 内置的计算数组长度的方法。同时,我们需要在循环中使用变量 $i 来表示当前遍历到的元素的索引。

总结一下如何在 foreach 循环中删除数组元素:

  1. 不要直接使用 unset() 函数删除元素,因为 foreach 循环是对副本数组进行遍历而不是原数组;
  2. 可以使用普通的 for 循环来删除数组元素,因为 for 循环是对原数组进行操作;
  3. for 循环中使用 unset() 函数删除符合条件的元素;
  4. 在删除元素后,使用 array_values() 函数将数组的索引重新排列。

现在,你已经知道如何在 foreach 循环中删除数组元素了,快去尝试一下吧!