因此array_filter()的手册说明了
如果从回调函数更改数组(例如添加,删除或取消设置元素),则此函数的行为未定义。
我在我的代码库中偶然发现了以下代码片段(为了重现性而添加了示例变量定义):
$enabledGroups = array(1, 3, 5);
$subgroups = array(
array('nid' => 1),
array('nid' => 2),
array(
'nid' => 3,
'children' => array(
array ('nid' => 4),
array ('nid' => 5)
)
)
);
$filterFunc = function (&$v) use ($enabledGroups, &$filterFunc) {
if($v['children']) {
$v['children'] = array_filter($v['children'], $filterFunc);
}
return in_array($v['nid'], $enabledGroups);
};
$subgroups = array_filter($subgroups, $filterFunc);
根据手册中警告的措辞,我不完全确定,如果这种用法构成未定义的行为。
所以我的问题是:如上所示递归使用array_filter()会导致未定义的行为,还是不会?