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

问题描述 投票:0回答:3

我的$ 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循环中的项目。

谢谢!

php arrays foreach
3个回答
1
投票

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

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

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

我希望能帮助你。 :)


0
投票

假设您要删除$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)。

© www.soinside.com 2019 - 2024. All rights reserved.