2011-11-08 116 views
0

如何循環一個數組的數組而不知道是否是數組?在PHP中循環陣列

Array 
(
    [0] => Array 
     (
      [0] => big 
      [1] => small 
     ) 

    [1] => Array 
     (
      [0] => big 
      [1] => tiny 
     ) 

    [2] => Array 
     (
      [0] => a 
      [1] => b 
      [2] => c 
      [3] => d 
      [4] => e 
      [5] => f 
     ) 
    [3] => row 
    [4] => cols 
    [5] => blablabla 
    [6] => Array 
     (
      [0] => asd 
      [1] => qwe 
     ) 
} 

任何想法:

用一個例子更好

?謝謝。

回答

1

您可以使用is_array來檢查,如果事情是一個數組,和/或可以使用is_object檢查它是否可以在foreach使用:

foreach ($arr as $val) 
{ 
    if (is_array($val) || is_object($val)) 
    { 
     foreach ($val as $subval) 
     { 
      echo $subval; 
     } 
    } 
    else 
    { 
     echo $val; 
    } 
} 

另一種替代方法是使用RecursiveIteratorIterator

$it = new RecursiveIteratorIterator(
      new RecursiveArrayIterator($arr), 
      RecursiveIteratorIterator::SELF_FIRST); 

foreach($it as $value) 
{ 
    # ... (each value) 
} 

遞歸迭代器適用於米多層次的深度。

4

您可以使用is_array來檢查該元素是否爲數組,如果是,則循環遞歸。

4

選擇哪種方法取決於您想要對數據進行什麼操作。可以遞歸地遍歷數組數組。

0
foreach($array as $value) { 
    if(is_array($value)) { 
     foreach($value as $innerValue) { 
      // do something 
     } 
    } 
} 

這將工作,如果你知道它將是最多2層嵌套數組。如果你不知道有多少層次的嵌套,那麼你將需要使用遞歸。或者你可以使用一個函數,如array_walk_recursive

0
$big_array = array(...); 
function loopy($array) 
{ 
    foreach($array as $element) 
    { 
     if(is_array($element)) 
     { 
      // Keep looping -- IS AN ARRAY-- 
      loopy($element); 
     } 
     else 
     { 
      // Do something for this element --NOT AN ARRAY-- 
     } 
    } 
} 

loopy();