PHP - 数组未设置在foreach循环中不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP - 数组未设置在foreach循环中不起作用相关的知识,希望对你有一定的参考价值。

我的$ positions数组中有各种项目,并执行以下操作:

foreach ($positions as &$position) {

    if ($position['date'] == $order['date']) {
        unset($position);
    }
}
var_dump($positions);

var_dump仍显示应排除的$ position。

当我做

foreach ($positions as $key => &$position) {
    if ($position['date'] == $order['date']) {
        unset($positions[$key]);
    }    
}

它确实删除了远远超出预期的项目。

有人知道在这两种情况下会发生什么,以及为什么未设置($ position)不起作用?我用'&'引用foreach循环中的项目。

谢谢!

答案

而不是使用&$ variableName使用$ varibaleName,因为在php中没有指针的概念而没有正确使用引用运算符有时会导致意外的结果。

foreach ($positions as $key => $eachPosition)
{
    if ($eachPosition['date'] == $order['date']) 
    {
        unset(positions[$key]);
    }    
}
另一答案
foreach ($positions as $position) {
  ($position['date'] == $order['date']) ? unset($position['date']) : '';   
}

我希望能帮助你。 :)

另一答案

假设您要删除$position['date']值;而不是使用unset($positions[$key])你可以做以下事情:

foreach ($positions as $key => $position) {
    if ($position['date'] == $order['date']) {
        unset($position['date']);
    }    
}

注意:我删除了foreach循环中的引用,因为根据您的示例,它未被使用并且可能导致意外行为(PHP foreach by reference causes weird glitch when going through array of objects)。

以上是关于PHP - 数组未设置在foreach循环中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP未设置嵌套数组的部分

PHP - Wordpress - 插件小部件更新功能 - 更新数组值 [Foreach 循环不起作用]

在 foreach 循环中未设置将数组转换为关联数组

Html.ActionLink 在 foreach 循环中不起作用

PHP - 在foreach循环中取消设置数组元素[重复]

PHP中使用foreach循环读取数组数据的方法