array_filter()的这种用法会导致未定义的行为吗?

时间:2017-03-27 16:57:29

标签: php recursion undefined-behavior

因此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()会导致未定义的行为,还是不会?

0 个答案:

没有答案