dongquqiao2010 2013-09-06 20:20
浏览 24
已采纳

PHP多维数组到html与递归

I have an multidimensional array and two functions for parsing throw the array. I want to receive multilevel unordered list. I have a mistake with html tags, but I can't find. Array is:

Array
(
    [2] => Array
        (
            [id] => 2
            [parent_id] => 0
            [name] => task2
            [childs] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [parent_id] => 2
                            [name] => task1
                        )
                )
          )
        [3] => Array
        (
            [id] => 3
            [parent_id] => 0
            [name] => task3
            [childs] => Array
                (
                    [4] => Array
                        (
                            [id] => 4
                            [parent_id] => 3
                            [name] => task4
                        )
                    [5] => Array
                        (
                            [id] => 5
                            [parent_id] => 3
                            [name] => task5
                            [childs] => Array
                                (
                                    [6] => Array
                                        (
                                            [id] => 6
                                            [parent_id] => 5
                                            [name] => task6
                                        )
                                 )
                        )
                )
        )
 )

The correct function is:

function formatHtmlARC11($array) {

foreach ($array as $k => $v) {

    if (is_array($v['childs']) && !empty($v['childs'])) {
       echo $v['id']; 
       $sub=$this->formatHtmlARC11($v['childs']);
    } else {
       echo  $v['id'];
    }
  }
  return $var;
}

My formatHtml function with a problem is:

function formatHtmlARC($array,$bul) {
     $htmlcode .='<ul>';
    if($bul==true){
        $htmlcode .='</ul>';  
        $bul=false;
    }

    foreach ($array as $k => $v) {
        if (is_array($v['childs']) && !empty($v['childs'])) {
            $htmlcode .='<li>';  
            $htmlcode .= $v['id']; 
            $htmlcode .='</li>';
            $bul=true;
            $sub=$this->formatHtmlARC($v['childs'], $bul);
        } else {
            $htmlcode .='<li>';  
            $htmlcode .= $v['id']; 
             $htmlcode .='</li>';
         }
       $htmlcode .='</ul>';
    }
    return $htmlcode;
   }  
  • 写回答

2条回答 默认 最新

  • dongze5043 2013-09-06 20:51
    关注

    Your code seems to have a lot of issues and is very hard to follow.

    I'd go about it in a simpler manner:

    $a = [
        ['id' => 1, 'childs' => [
            ['id' => 11],
            ['id' => 12]
        ]],
        ['id' => 2, 'childs' => [
            ['id' => 21],
            ['id' => 22, 'childs' => [
                ['id' => 221],
                ['id' => 222]
            ]]
        ]]
    ];
    
    function makeListItems($a) {
        $out = '';
        foreach($a as $item) {
            $out .= '<li>';
            $out .= $item['id'];
            if(array_key_exists('childs', $item)) {
                $out .= makeList($item['childs']);
            }
            $out .= '</li>';
        }
    
        return $out;
    }
    
    function makeList($a) {
        $out = '<ul>';
        $out .= makeListItems($a);
        $out .= '</ul>';
    
        return $out;
    }
    
    echo makeList($a);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法