2012-10-25 42 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);