2017-10-11 115 views
1

我在尋找,但我沒有找到我所需要的。將值插入到動態生成的多維數組中

來源結構是動態的,從MySQL數據庫生成菜單陣列結構:

array (
  2 => array (
    'title' => 'item', 
    'children' => array (
      10 => array (
        'title' => 'item', 
        'children' => array (
          14 => array (
            'title' => 'item', 
          ), 
          15 => array (
            'title' => 'item', 
          ), 
          16 => array (
            'title' => 'item', 
            'children' => array (
              23 => array (
                'title' => 'item', 
              ), 
              24 => array (
                'title' => 'item', 
              ), 
            ), 
          ), 
          17 => array (
            'title' => 'item', 
            'children' => array (
              20 => array (
                'title' => 'item', 
              ), 
            ), 
          ), 
          18 => array (
            'title' => 'item', 
          ), 
          19 => array (
            'title' => 'item', 
          ), 
          32 => array (
            'title' => 'item', 
            'children' => array (
              33 => array (
                'title' => 'item', 
              ), 
            ), 
          ), 
          59 => array (
            'title' => 'item', 
          ), 
          60 => array (
            'title' => 'item', 
            'children' => array (
              61 => array (
                'title' => 'item', 
              ), 
              62 => array (
                'title' => 'item', 
              ), 
            ), 
          ), 
          67 => array (
            'title' => 'item', 
          ), 
        ), 
      ), 
      12 => array (
        'title' => 'item', 
      ), 
      13 => array (
        'title' => 'item', 
      ), 
    ), 
  ), 
) 

我需要通過的所有記錄,並根據需要對當前地方在foreach實際上是增加新的價值。現在我可以使用此功能查看記錄以進行記錄:

function categorize($menu, $level = 0) 
{ 
    foreach ($menu as $key => &$data) 
    { 
     if (isset ($data['children'])) 
     { 
      categorize($data['children'], ($level + 1)); 
     } 
    } 
} 

但是不知道如何將新值添加到正確的位置。 輸出必須是這樣的:

array (
  2 => array (
    'level' => 0, 
    'first-item' => true, 
    'title' => 'item', 
    'children' => array (
      10 => array (
        'level' => 1, 
     'first-item' => true, 
        'title' => 'item', 
        'children' => array (
          14 => array (
            'level' => 2, 
      'first-item' => true, 
            'title' => 'item', 
          ), 
          15 => array (
            'level' => 2, 
            'title' => 'item', 
          ), 
          16 => array (
            'level' => 2, 
            'title' => 'item', 
            'children' => array (
              23 => array (
                'level' => 3, 
                'first-item' => true, 
                'title' => 'item', 
              ), 
              24 => array (
                'level' => 3, 
                'title' => 'item', 
              ), 
            ), 
          ), 
          17 => array (
         'level' => 2, 
            'title' => 'item', 
            'children' => array (
              20 => array (
                'level' => 3, 
                'title' => 'item', 
              ), 
            ), 
          ), 
          18 => array (
         'level' => 2, 
            'title' => 'item', 
          ), 
          19 => array (
         'level' => 2, 
            'title' => 'item', 
          ), .... 

謝謝您的幫助

+0

您是否使用直PHP或用像Laravel這樣的框架? – kerrin

+0

我使用直接的PHP。 – netoper

回答

0

您可以使用引用和遞歸以獲得您想要的輸出:

function processTitles(array &$titles, $level = 0) { 
    $i = 0; 

    foreach ($titles as &$title) { 
     $title['level'] = $level; 
     $title['first-item'] = ++$i === 1; 

     if (!empty($title['children'])) { 
      processTitles($title['children'], ++$level); 
     } 
    } 
} 

$titles = [ 
    // The input data that you posted 
]; 

processTitles($titles); 

var_dump($titles); 
+0

就是這樣。謝謝! – netoper

+0

一個問題..在哪裏我可以找到更多關於$ title ['first-item'] = ++ $ i === 1;我從來沒有見過這個。 – netoper

+0

++ $ i在===比較運算符被調用之前將$ i的值增加1。與1的比較將返回一個布爾值。如果(++ $ i === 1){ $ title ['first-item'] = ++ $ i === 1;''是一種簡寫的寫作方式: '第一項'] = true; } else { $ title ['first-item'] = false; }' –