删除项目在foreach循环在PHP
问题描述:
我有一个foreach循环,我想取消设置从数组中的项,如果某些条件得到满足,就像这样:删除项目在foreach循环在PHP
foreach ($array as $element) {
if (conditions) {
unset($element);
}
}
但该元素不后未设置那。我究竟做错了什么?我是不是引用了实际的元素或类似的东西?
答
简单的解决方案,取消设置元素通过它的指数:
foreach ($array as $key => $element) {
if (conditions) {
unset($array[$key]);
}
}
只是你重置$element
将无法正常工作,因为这个变量是不是数组元素的引用,而是一个副本。因此,更改$element
的值也不会更改该数组。
+0
谢谢,这解决了我的问题! – federicot
答
的替代方法,可以通过执行通过引用传递数组元素进入循环执行以下操作:
foreach($array as &$var) {
unset($var);
}
这是有用的,因为随后必须数组元素直接访问更改或删除作为你希望不必构建新的数组或通过密钥访问。对$ var所做的任何更改都会影响$ array的内容。
+1
这只会取消参考,而不是原始元素。 – alingex
你是否在意索引是否仍然设置? '$ array [4] = NULL!==!isset($ array [4])' – Shad
'unset'做了两件不同的事情。如果你已经使用了'foreach($ array as&$ element)'(注意&符号),那么你应该用null替换这个值,这是你可能会遇到的其他行为:从数组中删除项目完全没有痕迹。 – bart