【问题标题】:Converting PHP array in HTML list在 HTML 列表中转换 PHP 数组
【发布时间】:2012-03-21 12:06:11
【问题描述】:

我有下面的数组,我想以特定的 HTML 列表格式输出。

我的 PHP 数组如下:

Array
(
    [MAIN] => Master Product
    [ID1] => Array
        (
            [0] => Product 1
        )

    [ID2] => Array
        (
            [0] => Product 2
            [ID3] => Array
                (
                    [0] => Product 3
                )

            [ID4] => Array
                (
                    [0] => Product 4
                )
        )
)

我要找的HTML列表格式如下。

<ul id="treeview">
    <li>Master Product
        <ul>
            <li>Product 1</li>
            <li>Product 2
                <ul>
                    <li>Product 3</li>
                    <li>Product 4</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

任何帮助将不胜感激。

【问题讨论】:

    标签: php recursion binary-tree html-lists


    【解决方案1】:

    试穿一下尺寸:

    
    function recurseTree($var){
      $out = '<li>';
      foreach($var as $v){
        if(is_array($v)){
          $out .= '<ul>'.recurseTree($v).'</ul>';
        }else{
          $out .= $v;
        }
      }
      return $out.'</li>';
    }
    
    echo '<ul>'.recurseTree($yourDataArrayHere).'</ul>';
    
    

    【讨论】:

    • 你能把这个和我的结合成一个独立的函数吗?
    • 感谢您的回复。这绝对是完美的,正是我想要的。非常感谢。
    【解决方案2】:
    $data = array(); // your data
    
    function toUL($data=false, $flatten=false){
     $response = '<ul>';
     if(false !== $data) {
       foreach($data as $key=>$val) {
        $response.= '<li>';
        if(!is_array($val)) {
         $response.= $val;
        } else {
         if(!$flatten){
           $response.= toUL($val);
         } else {
           // pulls the sub array into the current list context
           $response.= substr($response,0,strlen($response)-5) . toUL($val);
         }
        }
        $response.= '</li>';
       }
     }
     $response.= '</ul>';
     return $response;
    }
    

    // 测试#1——命名值 echo toUL(array('a'=>'b','c'=>'d','e'=>array('f'=>'g'))); // 结果#1

    • b
    • d
      • g

    // 测试 #2 -- 值列表 echo toUL(数组('a','b','c',数组('d','e','f'))); // 结果#2

    • 一个
    • b
    • c
      • d
      • e
      • f

    【讨论】:

    • 您可能需要在 substr() 周围使用标记器来检查是否根据同一级别的上一次迭代是否为字符串来执行此操作..?
    • 抱歉回复晚了。这完美地工作。感谢您的回复。
    【解决方案3】:

    灵感来自this answer,但叶子被&lt;li&gt;包围

    function recurseTree($var)
    {
        $out = '';
        foreach ($var as $v) {
          if (is_array($v)) {
              $out .= '<ul>'.recurseTree($v).'</ul>';
          } else {
             $out .= '<li>'.$v.'</li>';
          }
        }
    
        return $out;
    }
    

    如果你有关联数组,你可以试试这个功能:

    function recurseTree($var)
    {       
        $out = '';
        foreach($var as $k => $v){
            if (is_array($v)) {
                $out .= '<dl>'.self::recurseTree($v).'</dl>';
            } else {
                $out .= '<dt>'.$k.'</dt>'.'<dd>'.$v.'</dd>';
            }
        }
    
        return $out;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 2015-08-29
      • 2020-03-27
      相关资源
      最近更新 更多