php display multilevel treenode menu

☆樱花仙子☆ 提交于 2019-12-08 11:58:48

问题


How do I display this structure into a multi-level menu?

Here's the structure:

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

And output should be like this:

  • Bracelets
    • Flowery Bracelets
      • Small Flowery Bracelets
  • Floral Dress
  • Summer Dress

Here is what I did but it still display the child nodes 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;

Thanks!


回答1:


It's because you still have the categories in the array when you already assigned them. What you can do is to do the function where you pass the argument as a reference, and the in the foreach loop to have the ability to clear the array from that already assigned category. Simple implementation below.

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


来源:https://stackoverflow.com/questions/22752355/php-display-multilevel-treenode-menu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!