-1

我在生成我的数据库(站点地图)的完整树时遇到了一些问题。
我达到了我想编写更好的代码的水平。这就是为什么我为这个谜题选择递归函数。

我想生成一个无穷无尽的无序列表。像这样:

<ul>
 <li><a></a>
  <ul>
    <li><a></a>(subs)
    etc etc etc.....
  </ul>
 </li>
</ul>

就像我已经说过的那样,我尝试了以下方法:

<?php
    function traverseArray($array, $sub=false)
    { 
        foreach($array as $cat)
        {
            if(isset($cat['childeren']) && is_array($cat['childeren']))
            {
                //a category with subs
                echo('<ul id="'.$cat['parent_cat_id'].'" class="lv0">');
                    echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a>'."\n");
                traverseArray($cat['childeren'], true);
            }else{
                if($sub){
                    //a sub category of category
                    echo('</ul></li>');
                    echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a></li>'."\n");                
                }else{
                    //category with no subs
                    echo('<ul id="'.$cat['parent_cat_id'].'" class="lv0">');            
                        echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a></li>'."\n");
                    echo('</ul>');
                }
            }
        }
    }
    traverseArray($sitemap);
?>

但这是一个我无法正确解决的难题,这是迄今为止的结果(混乱):

<ul id="0" class="lv0">
   <li id="0"><a href=#>Headsets</a>
</ul></li>

<li id="1"><a href=#>(USB) headsets ....</a></li>
</ul></li>
<li id="1"><a href=#>... headsets</a></li>
</ul></li>
<li id="1"><a href=#>.. USB headsets</a></li>
</ul></li>
<li id="1"><a href=#>Bluetooth headsets</a></li>
<ul id="0" class="lv0">
   <li id="0"><a href=#>Unified Communications</a></li>

大混乱!$sitemap 数组如下所示:

Array
(
    [0] => Array
        (
            [category_id] => 1
            [parent_cat_id] => 0
            ..........etc
            ........etc
            [type] => cat
            [childeren] => Array
                (
                    [0] => Array
                        (
                            [category_id] => 2
                            [parent_cat_id] => 1
                            .......etc
                            [type] => cat
                            [childeren] => Array
                                (
                                    [0] => Array
                                        (
                                            [category_id] => 32
                                            [parent_cat_id] => 16
                                            .......etc
                                            [type] => series
                                        )                            
                        )

所以孩子们在孩子们的孩子们,这是在正确的轨道上做这件事的最好方法吗?

还是有更好的方法?像sql树什么的?或者只是 foreach 中的旧 foreach ..(这次我试图避免)。

任何帮助将非常感激!!!

提前致谢,

雅各布

4

1 回答 1

0

“我的代码有什么问题?” 不是stackoverflow的问题。

想想'traverseArray' 函数应该做什么。你的代码是一团糟。这是一个数组遍历的干净示例。请根据您的需求进行调整:

function traverseArray($array)
{
    echo '<ul>';
    foreach($array as $cat)
    {
        echo '<li>';
        if(isset($cat['childeren']) && is_array($cat['childeren']))
        {
            echo '<a href="#">' . $cat['name'] . '</a>';
            traverseArray($cat['childeren']);
        }
        else
        {
            echo '<a href="' . $cat['url'] . '">' . $cat['name'] . '</a>';
        }
        echo '</li>';
    }
    echo '</ul>';
}

traverseArray($sitemap);
于 2013-01-23T16:35:20.427 回答