📅  最后修改于: 2023-12-03 14:52:09.117000             🧑  作者: Mango
你是否曾经遇到过需要在 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
循环中删除数组元素:
unset()
函数删除元素,因为 foreach
循环是对副本数组进行遍历而不是原数组;for
循环来删除数组元素,因为 for
循环是对原数组进行操作;for
循环中使用 unset()
函数删除符合条件的元素;array_values()
函数将数组的索引重新排列。现在,你已经知道如何在 foreach
循环中删除数组元素了,快去尝试一下吧!