我的$ 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循环中的项目谢谢!
答案 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']) : '';
}
我希望能帮助你。 :)