İç içe html bloklar halinde iç içe geçmiş bir dizi döner recursive function

3 Cevap php

Ben iç içe HTML bloklar (ille sadece DIV'leri) üretmek için bir fonksiyon dediğimiz bir özyinelemeli php fonksiyon yazmak için arıyorum. Yani, örneğin, aşağıdaki dizi için:

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

ve aşağıdaki işlevi

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

haline neden olur

<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>

3 Cevap

Ham biçimlendirme ve sizin için girintilenmiş çok ham yolu dilerim, ama yukarıda biçimlendirilmiş ettik olarak çalışması gerekir. İn_Array kullanımı fark (...)

CODE

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";
    }
}

OUTPUT

<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>

nasıl

<pre>
<?php print_r($myArray); ?>
</pre>

Diğer cevaplar dikkate o parametre olarak block() fonksiyonunu vermek mümkün olmak istediği gerçeğini sürmedi:

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');