多维数组树Menu-Submenu函数

时间:2013-11-08 00:55:02

标签: php arrays multidimensional-array

我有这个PHP问题,我应该在那里构建一个多维树。

这些是数组中的字符串:

 >nro_menu       > Menu ID                                                                 |
 dsc_menu       > Menu description                                                        |
 nro_menu_fk    > The parentmenu ID (menu > submenu)                                      |
 nro_ordem_menu > Show the order of childmenu inside the parentmenu                       
 leaf           > "Y" > it's a leaf, no childmenu / "N" > not a leaf, does have childmenu |

提供的PHP代码:

    $rs = array(
array(
    'nro_menu' => 3136,
    'dsc_menu' => 'Pedidos',
    'nro_menu_fk' => 1,
    'nro_ordem_menu' => '{0}',
    'leaf' => 'n'
),
array(
    'nro_menu' => 3137,
    'dsc_menu' => 'Relatórios',
    'nro_menu_fk' => 1,
    'nro_ordem_menu' => '{1}',
    'leaf' => 'n'
),
array(
    'nro_menu' => 4119,
    'dsc_menu' => 'Lançar',
    'nro_menu_fk' => 3136,
    'nro_ordem_menu' => '{0,0}',
    'leaf' => 'y'
),
array(
    'nro_menu' => 4120,
    'dsc_menu' => 'Manutenção',
    'nro_menu_fk' => 3136,
    'nro_ordem_menu' => '{0,1}',
    'leaf' => 'y'
),
array(
    'nro_menu' => 3138,
    'dsc_menu' => 'Emitir Pedido',
    'nro_menu_fk' => 3137,
    'nro_ordem_menu' => '{1,0}',
    'leaf' => 'y'
),
array(
    'nro_menu' => 3139,
    'dsc_menu' => 'Pedidos Colocados No Mês',
    'nro_menu_fk' => 3137,
    'nro_ordem_menu' => '{1,1}',
    'leaf' => 'y'
),
array(
    'nro_menu' => 3140,
    'dsc_menu' => 'Histórico Do Cliente',
    'nro_menu_fk' => 3137,
    'nro_ordem_menu' => '{1,2}',
    'leaf' => 'y'
),
array(
    'nro_menu' => 3141,
    'dsc_menu' => 'Entregas Efetuadas',
    'nro_menu_fk' => 3137,
    'nro_ordem_menu' => '{1,3}',
    'leaf' => 'y'
)
);

$tree = array();
buildTree($tree, $rs);

echo "<pre>", print_r($tree, true);

我必须构建“buildTree”函数,使用$ tree和$ rs创建一个输出,一次显示所有菜单和子菜单,无论它们有多深。 像这样:

Array
(
[Pedidos] => Array
 (
  [Lançar] => 4119
  [Manutenção] => 4120
)
 [Relatórios] => Array
(
  [Emitir Pedido] => 3138
  [Pedidos Colocados No Mês] => 3139
  [Histórico do Cliente] => 3140
  [Entregas Efetuadas] => 3141
    )
)

我需要完成这项练习才能获得批准。

但是我没有找到构造函数的逻辑。谁来帮帮我 ???请

1 个答案:

答案 0 :(得分:0)

试试这个:

function buildTree($ary){
  $output = '';
  foreach($ary as $a){
    $output .= '<dl>';
    foreach($a as $i => $v){
      $output .= "<dt>$i</dt><dd>$v</dd>";
    }
    $output .= '</dl>';
  }
  return $output;
}
echo buildTree($rs);