Hej.
Dziś na własne potrzeby musiałem stworzyć funkcję w PHP która z wielowymiarowej tablicy wyciągnie mi wszystkie tablice z wartościami i przeniesie je na zerowy poziom.
Brzmi dziwnie ale przykład może wyjaśni. Zapraszam
Funkcja
Najpierw sama funkcja
function array_flatten($array, &$values)
{
    if(empty($values))
        $values = [];
    $nonArrayValues = array();
    foreach ($array as $key => $value)
    {
        if(!is_array($value))
        {
            $nonArrayValues[$key] = $value;
        }
        else
        {
            $values[$key] = array_flatten($value, $values);
        }
    }
    return $nonArrayValues;
}
Przykład użycia
$arrayValues = [
    'val3.1' => 'valsss',
    'val3.2',
    'val3' => [
        'val3.1' => 'valsss',
        'val3.2',
        'val3.3' => [
            'val4.1',
            'val4' => ['vall'],
        ]
    ],
];
$free = array_flatten($arrayValues, $newArrayValues);
echo '<pre>'; print_r($newArrayValues); print_r($free); echo'</pre>';
/*
Array
(
    [val4] => Array
    (
        [0] => vall
    )
    [val3.3] => Array
    (
        [0] => val4.1
    )
    [val3] => Array
    (
        [val3.1] => valsss
        [0] => val3.2
    )
)
Array
(
    [val3.1] => valsss
    [0] => val3.2
)
*\
Wyjaśnienie
Funkcja korzysta z rekurencji do wyciągania tablic z wartościami i umieszcza je w innej tablicy.
array_flatten($arrayValues, $newArrayValues) przyjmuje 2 parametry:
– Tablica z wartościami
– Tablica wynikowa
Dodatkowo sama funkcja zwraca tablicę wartości które mogły się znaleźć bezpośrednio w tablicy danych.