Рекурсивная php-функция, которая превращает вложенный массив во вложенные html-блоки

Я хочу написать рекурсивную функцию php, которая вызовет функцию для генерации вложенных блоков HTML (не обязательно только DIV). Так, например, для следующего массива:

$a = array( 'b' => 'b value', 'c' => 'c value', 'd' => array( 'd1' => array( 'd12' = 'd12 value' ), 'd2' => 'd2 value' ), 'e' => 'e value' ); 

и следующая функция

 function block( $key ) { return '<div>'.$key.'</div>'; } 

приведет к

 <div> key - b </div> <div> key - c </div> <div> key - d <div> key - d1 <div> key - d12 </div> </div> <div> key - d2 </div> </div> <div> key - e </div> 

Solutions Collecting From Web of "Рекурсивная php-функция, которая превращает вложенный массив во вложенные html-блоки"

Извините грубое форматирование и очень грубый способ отступов для вас, но он должен работать так, как вы отформатировали выше. Обратите внимание на использование in_array (…)

КОД

 nestdiv($a); function nestdiv($array, $depth = 0) { $indent_str = str_repeat(" ", $depth); foreach ($array as $key => $val) { print "$indent_str<div>\n"; print "${indent_str}key - $key\n"; if (is_array($val)) nestdiv($val, ($depth+1)); print "$indent_str</div>\n"; } } 

ВЫВОД

 <div> key - b </div> <div> key - c </div> <div> key - d <div> key - d1 <div> key - d12 </div> </div> <div> key - d2 </div> </div> <div> key - e </div> 

как насчет

 <pre> <?php print_r($myArray); ?> </pre> 
 function block($a) { $ret = '<div>'; if(is_array($a)) { foreach($a as $k => $v) $ret .= block($v); } else { $ret .= $a; } $ret .= '</div>'; return $ret; } 
 function block($array) { $s = ''; foreach ($array as $key=>$value) { $s .= '<div>' . $key ; if (is_array($value)) $s .= block($value); else $s .= $value; $s .= '</div>'; } return $s; } echo block($a); 
 function divArray($array){ foreach($array as $key => $value){ echo "<div>"; echo $key; if(is_array($value)){ divArray($value); } else{ echo "$value"; } echo "</div>"; } } 

В других ответах не учитывался тот факт, что он хочет иметь функцию block() качестве параметра:

 function toNested($array, $blocFunc) { $result = ''; foreach ($array as $key => $value) { if is_array($value) $nestedElement = toNested($value, $blocFunc); else $nestedElement = $blocFunc($key) $result .= $nestedElement; } return $result; } echo toNested($a, 'block');