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

时间:2017-12-15 12:56:22

标签: php arrays 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循环中的项目

谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

假设您要删除$position['date']值;而不是使用unset($positions[$key]),您可以执行以下操作:

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

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

答案 2 :(得分:0)

foreach ($positions as $position) {
  ($position['date'] == $order['date']) ? unset($position['date']) : '';   
}

我希望能帮助你。 :)