从数据库

时间:2016-03-31 12:31:21

标签: php arrays

我从数据库得到以下输出,我想用这个数据构建一个菜单。

$output = [
    ['id_struct' => 1, 'title' => 'A', 'parent' => 0],
    ['id_struct' => 2, 'title' => 'B', 'parent' => 0],
    ['id_struct' => 3, 'title' => 'B1', 'parent' => 2],
    ['id_struct' => 4, 'title' => 'B2', 'parent' => 3],
    ['id_struct' => 5, 'title' => 'C', 'parent' => 0],
];

使用此输出,我需要构建另一个数组:

array (size=3)
  0 => 
    array (size=1)
      'title' => string 'A' (length=1)
  1 => 
    array (size=2)
      'title' => string 'B' (length=1)
      'children' => 
        array (size=1)
          0 => 
            array (size=2)
              'title' => string 'B1' (length=2)
              'children' => 
                array (size=1)
                  0 => 
                    array (size=1)
                      'title' => string 'BB1' (length=3)
  2 => 
    array (size=1)
      'title' => string 'C' (length=1)

它必须是这种格式,所以我可以导出到JSON。

实现这一目标的最佳方法是什么?我找到了很多解决方案,但所有这些解决方案都是使用print / echo将菜单导出到html,这在这里不起作用。

1 个答案:

答案 0 :(得分:2)

试试这个:

function buildTree(array $elements, $parentId = 0) {

$branch = array();

foreach ($elements as $element) {
    if ($element['parent'] == $parentId) {
        $children = buildTree($elements, $element['id_struct']);
        if ($children) {
            $element['children'] = $children;
        }
        $branch[] = $element;
    }
}

 return $branch;
}

$tree = buildTree($output);
echo "<pre>";
print_r( $tree );
echo "</pre>";

希望这有帮助。