2012-10-25 46 views
1

FOREACH中包含的陣列..的foreach頂層多維陣列內

Array 
    (
    [headerA] => Array 
     (
      [a1] => content1 
      [a2] => content2 
      [a3] => content3 
     ) 

    [headerB] => Array 
     (
      [a4] => content4 
      [a5] => content5 
      [a6] => content6 
      [a7] => content7 

     ) 

    [headerC] => Array 
     (
      [a8] => content8 
      [a9] => content9 
      [a10] => content10 

     ) 
    ) 

是否有更好的方法來acheive以下,有效地嵌套的foreach。這個代碼在哪裏通過高級數組,然後在那裏處理它的內容,像下面的輸出?

foreach ($array as $k=>$v){ 
    echo $k."<br/>"; 
    foreach ($v as $k1=>$v1){ 
      echo $k1." ".$v1."<br/>"; 
    } 
} 

將輸出..

headerA 
a1 content1 
a2 content2 
a3 content3 

headerB 
a4 content4 
a5 content5 
a6 content6 
a7 content7 

headerC 
a8 content8 
a9 content9 
a10 content10 
+3

這是最好的辦法 –

+0

定義「好」。 – hakre

+0

另一種方法也許沒有嵌套foreach沒有辦法我手動鍵入alllll,HTML :) – user1145238

回答

4

的另一種方法的foreach嵌套是使用一個遞歸函數。

我說「另類」,因爲「更好」的概念取決於你使用它的上下文。當然,遞歸方法的主要優點是對數組的級數沒有限制:在線性模式下,每個數組的維度需要一個foreach(3維數組=> 3 foreach);在遞歸模式下,無論維數如何,代碼都保持不變。

下面的例子:

function recursive_print ($array) 
{ 
    echo "<br />\n"; 
    foreach ($array as $k => $v) 
    { 
     echo $k; 

     if (is_array ($v) || is_object ($v)) recursive_print ($v); 
     else echo ' ' . $v; 

     echo "<br />\n"; 
    } 
} 

可以是還添加$級別參數,要知道遞歸的你是在水平有用:

function recursive_print ($array, $level = 0) 
{ 
    if ($level > 0) echo "<br />\n"; 
    foreach ($array as $k => $v) 
    { 
     echo $k; 

     if (is_array ($v) || is_object ($v)) recursive_print ($v, $level + 1); 
     else echo ' ' . $v; 

     echo "<br />\n"; 
    } 
} 

在這兩種情況下,調用功能簡單地說就是:

recursive_print ($array);