Я хочу написать рекурсивную функцию 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>
Извините грубое форматирование и очень грубый способ отступов для вас, но он должен работать так, как вы отформатировали выше. Обратите внимание на использование 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');