Перебрать многомерный массив с данными и вывести в строки
Есть многомерный массив с произвольной глубиной.
$test_110 = [
'dim' => [
'dim2' => [
'dim3'
],
'dim4' => [
'dim5'
]
],
'dim6' => [
'dim7'
]
];
Нужно пройтись по нему и на выходе было три строки: // output: dim/dim2/dim3 // output: dim/dim4/dim5 // output: dim6/dim7 Пока что удалось сделать это подсчёт рекурсивно глубины масива:
function array_depth($a, $b = 0)
{
$d = 0;
foreach ($a as $v)
{
if (is_array($v))
{
$c = array_depth($v, $b);
$d = ($d > $c) ? $d : $c;
}
}
return $d+1;
}
echo array_depth($test_110);// output: 3
Как быть дальше?
Ответы (1 шт):
Автор решения: phpBear
→ Ссылка
На скорую руку... Надеюсь разберетесь.
<?php
$test_110 = [
'dim' => [
'dim2' => [
'dim3'
],
'dim4' => [
'dim5'
]
],
'dim6' => [
'dim7'
]
];
function recursive_walk( $parent_key, $arr ) {
if (is_array( $arr ) && count( $arr ) > 0 ) {
if ( mb_strpos($parent_key, "/") !== false ) { echo $parent_key; }
//Первый раз передаем $test_110 - получаем его ключи `dim`, `dim6`
$keys = array_keys( $arr );
//Для каждого элемента массива $test_110 вызываем еще раз эту же функцию и передаем как входной параметр под-массивы
//$test_110['dim'], $test_110['dim6']
//На втором вызове функции на вход попадет под-массив $test_110['dim'], у него получим ключи `dim2`, `dim4` - вызовем эту же
//функцию для $test_110['dim']['dim2'], $test_110['dim']['dim4']
//И так далее вглубь пока хватит памяти и последний элемент не будет массивом
if ( is_array( $keys ) && count( $keys ) > 1 ) {
foreach( $keys as $key ) {
recursive_walk($parent_key."/".$key, $arr[$key] );
}
} else {
//Попали на элемент который не является массивом - например `dim3`, `dim5`, `dim7`
//Просто выводим его
echo ( mb_strpos($parent_key, "/") === false ? $parent_key : "")."/".$arr[0]."\n";
}
}
}
$keys = array_keys( $test_110 );
foreach( $keys as $key ) {
recursive_walk( $key, $test_110[$key] );
}