PHP Looping через рекурсивный массив

Я хочу, чтобы цикл через массив в 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>'; } } }