Так что руководство для 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 (), как показано выше, к неопределенному поведению или нет?
Задача ещё не решена.
Других решений пока нет …