php display многоуровневое меню treenode

Как отобразить эту структуру в многоуровневом меню?

Вот структура:

array 0 => array 'product_category_code' => string 'bracelets' (length=9) 'product_category_desc' => string 'Bracelets' (length=9) 'parent_node' => string '' (length=0) 'inactive' => string '0' (length=1) 'sort' => string '0' (length=1) 'created_by' => string '1' (length=1) 'created_date' => string '2014-03-14 22:04:08' (length=19) 'modified_by' => string '1' (length=1) 'modified_date' => string '2014-03-14 22:09:05' (length=19) 1 => array 'product_category_code' => string 'floral-dress' (length=12) 'product_category_desc' => string 'Floral Dress' (length=12) 'parent_node' => string '' (length=0) 'inactive' => string '0' (length=1) 'sort' => string '0' (length=1) 'created_by' => string '1' (length=1) 'created_date' => string '2014-03-14 22:09:49' (length=19) 'modified_by' => string '1' (length=1) 'modified_date' => string '2014-03-30 19:06:58' (length=19) 2 => array 'product_category_code' => string 'flowery-bracelets' (length=17) 'product_category_desc' => string 'Flowery Bracelets' (length=17) 'parent_node' => string 'bracelets' (length=9) 'inactive' => string '0' (length=1) 'sort' => string '0' (length=1) 'created_by' => string '1' (length=1) 'created_date' => string '2014-03-14 22:09:16' (length=19) 'modified_by' => string '1' (length=1) 'modified_date' => string '2014-03-30 19:08:44' (length=19) 3 => array 'product_category_code' => string 'small-flowery-bracelets' (length=23) 'product_category_desc' => string 'Small Flowery Bracelets' (length=23) 'parent_node' => string 'flowery-bracelets' (length=17) 'inactive' => string '0' (length=1) 'sort' => string '0' (length=1) 'created_by' => string '1' (length=1) 'created_date' => string '2014-03-14 22:08:35' (length=19) 'modified_by' => string '1' (length=1) 'modified_date' => string '2014-03-30 19:09:44' (length=19) 4 => array 'product_category_code' => string 'summer-dress' (length=12) 'product_category_desc' => string 'Summer Dress' (length=12) 'parent_node' => string '' (length=0) 'inactive' => string '0' (length=1) 'sort' => string '0' (length=1) 'created_by' => string '1' (length=1) 'created_date' => string '2014-03-14 22:09:29' (length=19) 'modified_by' => string '0' (length=1) 'modified_date' => null 

И вывод должен быть следующим:

  • Браслеты
    • Цветочные браслеты
      • Маленькие цветочные браслеты
  • Цветочные платья
  • Летнее платье

Вот что я сделал, но он все еще отображает дочерние узлы a

 function getChildren($rows, $p = 0) { $r = array(); foreach($rows as $row) { if ($row['parent_node']==$p) { var_dump($p); $r[$row['product_category_code']] = getChildren($rows, $row['product_category_code']); } } return $r; 

Благодаря!

Solutions Collecting From Web of "php display многоуровневое меню treenode"

Это потому, что у вас все еще есть категории в массиве, когда вы уже назначили их. Что вы можете сделать, так это выполнить функцию, в которой вы передаете аргумент в качестве ссылки, а в цикле foreach – возможность очистить массив от этой уже назначенной категории. Простая реализация ниже.

 function getChildren(&$rows, $p = 0) { $r = array(); foreach($rows as $row_id => $row) { if ($row['parent_node']==$p) { $r[$row['product_category_code']] = getChildren($rows, $row['product_category_code']); unset($rows[$row_id]); } } return $r; } не function getChildren(&$rows, $p = 0) { $r = array(); foreach($rows as $row_id => $row) { if ($row['parent_node']==$p) { $r[$row['product_category_code']] = getChildren($rows, $row['product_category_code']); unset($rows[$row_id]); } } return $r; }