首页 | PHP资讯 | 技术专栏 | 资源共享 | PHP培训 | PHP职场 | 图书 | PHP ON WIN | PHP圈子
返回列表 回复 发帖

[算法]只用两个循环输出DIV树,不能用递归

[算法]只用两个循环输出DIV树,不能用递归

原数组:

<?php
return array (
  0 =>
  array (
    'study_id' => 98,
    'study_name' => '第一章节',
    'parent_id' => 0,
    'deep' => 0,
    'blank' => NULL,
  ),
  1 =>
  array (
    'study_id' => 102,
    'study_name' => '第一课',
    'parent_id' => 98,
    'deep' => 1,
    'blank' => '  ',
  ),
  2 =>
  array (
    'study_id' => 103,
    'study_name' => '第一小节',
    'parent_id' => 102,
    'deep' => 2,
    'blank' => '    ',
  ),
);
?>



输出成下成格式,就是DIV树,父级的所有子级要用一个DIV包含,
程序只能用到两个循环,一个主循环一个辅助循环,不能用递归
<div class="Button_list_root"">第一章节</div>
<div id="menu_98">
  <div>   第一课</div>
  <div id="menu_102">
    <div style="cursor:pointer;">     第一小节</div>
    <div id="menu_103"></div>
  </div>
</div>

[ 本帖最后由 七月十五 于 2008-9-1 14:02 编辑 ]
273二手车


福州PHP策进会(PEA)。加QQ群25904432 11189041

不错的题目,PHPER我想很多会忽视算法的训练,来点这些题目很好:victory:

TOP

:o
我潜水很多年,但是最近看到很多回复是这么写的:  
我非常不愿意回帖,但是最近看到一个回复,使我茅塞顿开  
他是这么写的  
我看帖是从来不回的,直到有一天,我看见一个人是这么写的:  

TOP

有出题目就加精华,我出了3提都不加,斑竹什么意思啊

TOP

DB->XML + XSLT ->HTML

含继承性的数据用数组处理本身就不合理, 对高级语言谈算法这听起来就好笑:lol
这语法!!! 80后的吧?
----------------------------
www.arenachampion.net

TOP

:L 算法题太复杂了

TOP

<?php
$myarr = array (
  0 =>
  array (
    'study_id' => 98,
    'study_name' => '第一章节',
    'parent_id' => 0,
    'deep' => 0,
    'blank' => NULL,
  ),
  1 =>
  array (
    'study_id' => 102,
    'study_name' => '第一课',
    'parent_id' => 98,
    'deep' => 1,
    'blank' => '  ',
  ),
  2 =>
  array (
    'study_id' => 103,
    'study_name' => '第一小节',
    'parent_id' => 102,
    'deep' => 2,
    'blank' => '    ',
  )
);


foreach($myarr as $myitem)
{
        if($myitem['deep']==0)
        {
                $result[$myitem['study_id']]="<div class=\"Button_list_root\">".$myitem['study_name']."</div>"."\n"."<div id=\"menu_".$myitem['study_id']."\">\n";
        }
        if($myitem['deep']==1)
        {
                $result[$myitem['study_id']]="<div>".$myitem['study_name']."</div>"."\n"."<div id=\"menu_".$myitem['study_id']."\">\n";
        }
        if($myitem['deep']==2)
        {
                $result[$myitem['study_id']]="<div style=\"cursor:pointer;\">".$myitem['study_name']."</div>"."\n"."<div id=\"menu_".$myitem['study_id']."\">\n";
        }
}

rsort($myarr); //这里最好能按照deep进行排序,升序,不过我排不来啦 :)

foreach($myarr as $myitem)
{
        $result[$myitem['parent_id']] .= $result[$myitem['study_id']]."</div>\n";
}

print_r($result);

echo $result[0];

[ 本帖最后由 winks716 于 2007-8-21 16:46 编辑 ]

TOP

如果是下面这样的已排序数组,一个循环就够了
<?php return array (
  0 =>
  array (
    'study_id' => 98,
    'study_name' => '第一章节',
    'parent_id' => 0,
    'deep' => 0,
    'blank' => NULL,
  ),
  1 =>
  array (
    'study_id' => 102,
    'study_name' => '第一课',
    'parent_id' => 98,
    'deep' => 1,
    'blank' => '  ',
  ),
  2 =>
  array (
    'study_id' => 103,
    'study_name' => '第一小节',
    'parent_id' => 102,
    'deep' => 2,
    'blank' => '    ',
  ),
  3 =>
  array (
    'study_id' => 104,
    'study_name' => '第二小节',
    'parent_id' => 102,
    'deep' => 2,
    'blank' => '    ',
  ),
  4 =>
  array (
    'study_id' => 105,
    'study_name' => '第二课',
    'parent_id' => 98,
    'deep' => 1,
    'blank' => '  ',
  ),
); ?>
让复杂变得简单,这就是我的作风

TOP

[php]$menu = array (
  0 =>
  array (
    'study_id' => 98,
    'study_name' => 'S1',
    'parent_id' => 0,
    'deep' => 0,
    'blank' => NULL,
  ),
  1 =>
  array (
    'study_id' => 102,
    'study_name' => 't1',
    'parent_id' => 98,
    'deep' => 1,
    'blank' => '  ',
  ),
  2 =>
  array (
    'study_id' => 103,
    'study_name' => 'tt1',
    'parent_id' => 102,
    'deep' => 2,
    'blank' => '    ',
  ),
);
function getMenu($rootID) {
    global $menu;
    switch ($menu[$rootID]["deep"]) {
        case 0: //root
            echo "<div class=\"Button_list_root\">";
            break;
        case 2: //leaf
            echo "<div style=\"cursor:pointer;\">";
            break;
        default:
            echo "<div>";
            break;
    }
    echo $menu[$rootID]["study_name"]."</div>\n";
    echo "<div class=\"menu_".$menu[$rootID]["study_id"]."\">";
    foreach ($menu as $key => $value) {
        if ($key == $rootID) continue;
        if ($value["parent_id"] == $menu[$rootID]["study_id"]) {
            getMenu($key);
        }
    }
    echo "</div>\n";
}

getMenu(0);[/php]

我还是喜欢用递归解决这个问题。

TOP

是因为我用了两个循环所以要求两个循环:P
273二手车


福州PHP策进会(PEA)。加QQ群25904432 11189041

TOP

返回列表