【发布时间】:2023-03-06 13:39:01
【问题描述】:
我的 $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]);
}
}
它确实删除了比预期更多的项目。
任何人都知道在这两种情况下会发生什么以及为什么 unset($position) 不起作用?我在 foreach 循环中使用 '&' 引用该项目。
谢谢!
【问题讨论】:
-
尝试从第二次尝试中删除
&。 -
你可以试试array_diff。
-
我想我明白了。在第二种情况下,它确实删除了比预期更多的项目,因为某些值在数据库中存储为这样的“-0001-11-30 00:00:00.000000”作为日期时间,但我希望所有内容都有一个有效的日期或 NULL。
-
$positions = array_filter($positions, function($x) { return $x['date'] != '1'; });