Вывод рекурсивной итерации в новый массив

не могу сделать вывод рекурсии в новый массив. Вот так работает, выводит текстовые строки:

function recurse($item) {
    foreach ($item as $key => $value) {
        if (is_array($value)) {
            recurse($value);
        } else {
            echo "$key : $value\n";
        }
    }
}

Но я хочу записать пары $key => $value в новый массив с выводом последнего как $dataArray из функции таким образом, но это не работает

function recurse($item) {
    $dataArray = [];
    foreach ($item as $key => $value) {
        if (is_array($value)) {
            recurse($value);
        } else {
            $dataArray[$key] = $value;
        }
    }
    return $dataArray;
}

Ответы (1 шт):

Автор решения: Laukhin Andrey

Судя по всему, мой комментарий не приблизил к решению, поэтому демонстрирую наглядно:

function recurse($item)
{
    $dataArray = [];
    foreach ($item as $key => $value) {
        if (is_array($value)) {
            $dataArray = array_merge($dataArray, recurse($value));
        } else {
            $dataArray[$key] = $value;
        }
    }
    return $dataArray;
}

Есть решение в одну строчку:

$out = []; // массив с данными
array_walk_recursive($arr, function ($v, $k) use (&$out){$out[$k] = $v;});

Но учтите, что элементы с одинаковыми ключами будут перезаписываться.

→ Ссылка