Я хочу, чтобы цикл через массив в PHP. Цикл должен быть рекурсивным, потому что я не сейчас, сколько массивов в массиве есть. Это для чтения переводов в Symfony2.
Формат вывода:
ade afg bhi cjklm cno
с примером массива:
$array = array( 'a' => array('d' => 'e', 'f' => 'g'), 'b' => array('h' => 'i'), 'c' => array( 'j' => array( 'k' => array( 'l' => 'm')), 'n' => 'o'));
Я пробовал следующее, но это не окончательное решение, но рекурсия работает:
function displayArrayRecursively($array) { foreach ($array as $key => $value) { if (is_array($value)) { echo $key . '<br>'; displayArrayRecursively($value); } else { echo $key . '<br>' . $value . '<br>'; } } }
Заранее спасибо!
Я предполагаю, что ваша функция просто выводится
a d e ...
Что-то вроде этого должно работать:
displayArrayRecursively($array, null); function displayArrayRecursively($array, $keysString = '') { if (is_array($array)) { foreach ($array as $key => $value) { displayArrayRecursively($value, $keysString . $key . '.'); } } else { echo $keysString . $array . '<br/> '; } }
Это должно быть очень близко к тому, что вам нужно.
Эта функция делает то, что вы хотите:
function displayArrayRecursively($array, $tree = array()) { foreach ($array as $key => $value) { if (is_array($value)) { displayArrayRecursively($value, array_merge($tree, array($key))); } else { print implode('.', array_merge($tree, array($key, $value))); print "\n<br />"; } } }
Вывод:
ade afg bhi cjklm cno
Функция, которую вы хотите
function displayArrayRecursively($array, $parent = '') { foreach ($array as $key => $value) { if (is_array($value)) { if(count($value) == 1 && !empty($parent)) $key = $parent . $key; displayArrayRecursively($value, $key); } else { echo $parent; echo $key . $value . '<br>'; } } }