2009-11-19 115 views
4

我正在尋找可以調用函數來生成嵌套HTML塊(不一定只有DIV)的遞歸php函數。因此,例如,對於下面的數組:將嵌套數組轉換爲嵌套html塊的遞歸php函數

$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> 
+0

您似乎沒有在任何地方使用這些值(例如, 'b值')。這是故意的嗎? – 2009-11-19 22:31:49

+1

爲什麼這個社區wiki?這是一個有效的編程問題。你失去代表! – 2009-11-19 22:35:59

回答

7

藉口粗格式和縮進你的非常粗糙的方式,但它應該工作,你在前面已經格式化。注意使用in_array(...)

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

輸出的

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

縮進是一個很好的接觸。 – notJim 2009-11-19 22:40:45

+0

您可以更改str_repeat('',$ depth)的第一個迭代器 – Sergi 2009-11-19 22:42:30

+0

它是** in_array()**還是** is_array()**? – user3888958 2017-08-30 09:12:52

1

怎麼樣

<pre> 
<?php print_r($myArray); ?> 
</pre> 
0
function divArray($array){ 
    foreach($array as $key => $value){ 
     echo "<div>"; 
     echo $key; 
     if(is_array($value)){ 
      divArray($value); 
     } 
     else{ 
     echo "$value"; 
     } 
     echo "</div>"; 
    } 
} 
+0

當你不是數組時,你只關閉div。 – Sergi 2009-11-19 22:37:25

+0

哎呀!你是對的。糾正。 – GSto 2009-11-19 22:43:49

0
function block($a) { 
    $ret = '<div>'; 
    if(is_array($a)) { 
     foreach($a as $k => $v) 
      $ret .= block($v); 
    } else { 
     $ret .= $a; 
    } 
    $ret .= '</div>'; 
    return $ret; 
} 
0
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); 
+0

哎呀Sergi打我... – Ben 2009-11-19 22:38:24

0

其他的答案並沒有考慮到,他希望能夠在事實以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');