2014-03-24 114 views
0

我需要遍歷多維數組。但是我需要把它做得很複雜:迭代必須按級別進行 - 首先是1級元素,之後是2級元素,之後是3級元素等。PHP複雜的多維數組迭代

如果我想要,我可以自己寫到,但我需要確保我沒有重新發明輪子。在PHP中是否有任何現成的實現?

UPDATE

我應該提供什麼樣的代碼?這是一個理論問題。我可以爲您提供一個數組..:

Array 
(
    [lev1_1] => Array 
     (
      [ID] => 3547 
      [children] => Array 
       (
        [lev2_1] => Array 
         (
          [ID] => 3550 
         ) 

        [lev2_2] => Array 
         (
          [ID] => 3551 
         ) 
       ) 
     ) 
    [lev1_2] => Array 
     (
      [ID] => 3547 
      [children] => Array 
       (
        [lev2_3] => Array 
         (
          [ID] => 3550 
          [children] => Array 
           (
            [lev3_1] => Array 
             (
              [ID] => 3550 
             ) 

            [lev3_2] => Array 
             (
              [ID] => 3551 
             ) 
           ) 
         ) 

        [lev2_4] => Array 
         (
          [ID] => 3551 
         ) 
       ) 
     ) 

我需要通過lev1_x迭代,然後lev2_x,然後lev3_x

+3

有任何代碼要展示給我們嗎? –

+1

請向我們展示您的代碼 –

+0

爲了進一步強調。 **請給我們看一些代碼**。 – AnchovyLegend

回答

1

嗯,這裏是一個愚蠢的方式按等級獲得的值。請注意,您需要根據您的使用調整代碼。

function array_values_by_level($array, $level = 0, &$values = null) { 
    if ($values === null) 
     $values = array(); 
    if (!isset($values[$level])) 
     $values[$level] = array(); 
    foreach ($array as $v) { 
     if (is_array($v)) 
      array_values_by_level($v, $level + 1, &$values); 
     else 
      $values[$level][] = $v; 
    } 

    return $values; 
} 

測試用例:

$big_array = array(
    '1', 
    '2', 
    array(
     '2.1', 
     '2.2', 
     array(
      '2.2.1', 
      '2.2.2', 
      array(
       '2.2.2.1' 
      ) 
     ), 
     '2.3', 
     array(
      '2.3.1', 
      array(
       '2.3.1.1', 
       '2.3.1.2' 
      ) 
     ) 
    ) 
); 

foreach (array_values_by_level($big_array) as $k => $v) 
    printf("[%d] %s \n", $k, implode(', ', $v)); 

// [0] 1, 2 
// [1] 2.1, 2.2, 2.3 
// [2] 2.2.1, 2.2.2, 2.3.1 
// [3] 2.2.2.1, 2.3.1.1, 2.3.1.2