将值插入到动态生成的多维数组中

问题描述:

我在寻找,但我没有找到我所需要的。将值插入到动态生成的多维数组中

来源结构是动态的,从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

您可以使用引用和递归以获得您想要的输出:

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; }' –