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.