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!

有帮助吗?

解决方案

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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top