【问题标题】:Recursive sitemap array function php递归站点地图数组函数php
【发布时间】:2013-01-07 04:09:02
【问题描述】:

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

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

<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 ..(这次我试图避免)。

任何帮助将不胜感激!!!

提前致谢,

雅各布

【问题讨论】:

标签: php mysql database arrays html-lists


【解决方案1】:

“我的代码有什么问题?”不是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);

【讨论】:

  • 感谢您的回答,但是,我知道这不是询问我的代码有什么问题的网站!也许我把这个问题说错了,应该是这样的,你如何在树上反转(数组)并输出嵌套列表?或以这种方式。我也知道我的代码是一团糟,告诉过你。我什至在一开始也尝试过这个选项。当我想输出树的第一个项目时,它开始变得一团糟,因为现在你只得到孩子。
  • 添加了输出树的第一个元素。请检查。
  • 太棒了!谢谢,我自己无法弄清楚(仍然无法理解)。
猜你喜欢
  • 1970-01-01
  • 2015-04-27
  • 2010-09-24
  • 2021-08-14
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多