尝试使用level_id从项目的平面列表创建嵌套列表

时间:2015-03-26 18:39:07

标签: php html

我有一系列项目,每个项目都有与之关联的深度级别。我试图将它们放入HTML无序列表但是很难。

数组看起来像:

$_items = array(
    "0" => array('level'=>1,'name'=>'products','url'=>'/products/something.html'),
    "1" => array('level'=>2,'name'=>'salts','url'=>'/salts/something.html'),
    "2" => array('level'=>3,'name'=>'dogs','url'=>'/dogs/something.html'),
    "3" => array('level'=>3,'name'=>'cats','url'=>'/cats/something.html'),
    "4" => array('level'=>2,'name'=>'ponies','url'=>'/ponies/something.html'),
    "5" => array('level'=>2,'name'=>'wolves','url'=>'/wolves/something.html'),
    "6" => array('level'=>1,'name'=>'bears','url'=>'/bears/something.html'),
    "7" => array('level'=>1,'name'=>'monkey','url'=>'/monkey/something.html'),
);

我试图让它看起来像:



<ul>
  <li>products</li>
  <ul>
    <li>salts</li>
    <ul>
      <li>dogs</li>
      <li>cats</li>
    </ul>
    <li>ponies</li>
    <li>wolves</li>
  </ul>
  <li>bears</li>
  <li>monkey</li>
</ul>
&#13;
&#13;
&#13;

任何建议都将不胜感激。我正在努力解决如何检测何时打开或关闭标签的代码。

1 个答案:

答案 0 :(得分:3)

试试这个:

$_items = array(
    "0" => array('level'=>1,'name'=>'products','url'=>'/products/something.html'),
    "1" => array('level'=>2,'name'=>'salts','url'=>'/salts/something.html'),
    "2" => array('level'=>3,'name'=>'dogs','url'=>'/dogs/something.html'),
    "3" => array('level'=>3,'name'=>'cats','url'=>'/cats/something.html'),
    "4" => array('level'=>2,'name'=>'ponies','url'=>'/ponies/something.html'),
    "5" => array('level'=>2,'name'=>'wolves','url'=>'/wolves/something.html'),
    "6" => array('level'=>1,'name'=>'bears','url'=>'/bears/something.html'),
    "7" => array('level'=>1,'name'=>'monkey','url'=>'/monkey/something.html'),
);

$depth = 0;

foreach( $_items as $value ) {
    if ( $value['level'] > $depth )
        echo str_repeat( '<ul>', ( $value['level'] - $depth ) );
    if ( $value['level'] < $depth )
        echo str_repeat( '</ul>', ( $depth - $value['level'] ) );

    $depth = $value['level'];

    echo "<li><a href=\"$value[url]\">$value[name]</a></li>";
}
echo str_repeat( '</ul>', $depth );

$depth var用于监视当前级别,最后str_repeat()将关闭所有级别,例如,如果数组中的最后一级不在根级别。