PHP函数生成UL LI

时间:2010-03-16 05:30:06

标签: php arrays treeview

我将这个地址称为函数olLiTree

PHP function that creates a nested ul li?

我有这个数组

  

$ tree =   阵列( “A”=>阵列( “B”=>阵列( “C”=> “中C”, “d”=> “中d”), “E”=>阵列( “F” => “中F”, “G”=> “中G”)));

但无法使用此功能

function olLiTree($tree)
{
    echo '<ul>';
    foreach($tree as $item) {
        if (is_array($item)) {
            olLiTree($item);
        } else {
            echo '<li>', $item, '</li>';
        }
    }
    echo '</ul>';
}

生成

<ul>
  <li>A</li>
  <li>B
    <ul>
      <li>C</li>
      <li>D</li>
    </ul>
  </li>
  <li>E
    <ul>
      <li>F
      </li>
    </ul>
  </li>
  <ul>
    <li>G</li>
  </ul>
</ul>

任何人都可以帮我解决这个问题吗? 感谢..

2 个答案:

答案 0 :(得分:8)

function olLiTree($tree) {
    $out = '<ul>';

    foreach($tree as $key => $value) {
        $out.= '<li>';

        if (is_array($value)) {
            $out.= $key . olLiTree($value);
        } else {
            $out.= $value;
        }

        $out.= '</li>';
    }

    $out.= '</ul>';

    return $out;
}

始终return最终输出,不要直接echo。有一天,当你发现希望立即echo时,你会感谢自己。 :)

您可能希望将数组结构更改为此,因为它不那么冗余(与上面的代码一起使用):

$tree = array('A', 'B', 'C' => array('CA', 'CB'), 'D');

答案 1 :(得分:1)

通过使用这样的东西它应该工作(我没有测试它,所以希望我没有犯任何令人尴尬的错误):

function olLiTree($tree)
{
    echo '<ul>';
    foreach($tree as $key => $item) {
        if (is_array($item)) {
            echo '<li>', $key;
            olLiTree($item);
            echo '</li>';
        } else {
            echo '<li>', $item, '</li>'; // Or use $key here as well
        }
    }
    echo '</ul>';
}

如果要完全匹配给定的示例,则需要修改数组,因为它与结果不匹配。 (但我想这不是问题)