展平阵列

时间:2013-03-29 18:41:52

标签: php

我有一个将数组更改为html列表(ol / ul)的函数。数组的深度作为参数传递。

我只想在一个功能中执行此操作。

for($i = 0; $i < $depth; $i++) {
   foreach($list_array as $li) {
      if(! is_array($li))
      {
         $str .= '<li>' . $li . '</li>';
      }
   }
}

这段代码给了我数组的第一个维度。我希望每次$i增量时都要展平这个数组。

你有什么建议可以提供帮助吗?

是的,我知道array_walk_recursive(),对象迭代器等...我想知道是否有一种简单的方法来完成这项任务而不使用任何其他任务。我无法想出任何东西。

不,这不是任何我不允许使用迭代器等的大学项目。

编辑:

print_list(array(
   'some first element',
   'some second element',
   array(
      'nested element',
      'another nested element',
      array(
         'something else'
      )
   )
));

应该输出如下内容:

<ul>
   <li>some first element</li>
   <li>some second element</li>
   <ul>
      <li>nested element</li>
      <li>another nested element</li> // etc

2 个答案:

答案 0 :(得分:1)

使用递归可能最容易实现:

function print_list($array){
    echo '<ul>';
    // examine every value in the array
    // (including values that may also be arrays)
    for($array as $val){
        if(is_array($val){
            // when we discover the value is, in fact, an array
            // print it as if it were the top-level array using
            // this function
            print_list($val);
        }else{
            // if this is a regular value, print it as a list item
            echo '<li>'.$val.'</li>';
        }
    }
    echo '</ul>';
}

如果要进行缩进,可以定义深度跟踪参数和协同例程(print_list_internal($array, $depth))或只添加默认参数(print_list($array,$depth=0)),然后打印多个空格任何事情的前面都取决于$depth

答案 1 :(得分:1)

function print_list($array) {
  echo '<ul>';
  // First print all top-level elements
  foreach ($array as $val) {
    if (!is_array($val)) {
      echo '<li>'.$val.'</li>';
    }
  }
  // Then recurse into all the sub-arrays
  foreach ($array as $val) {
    if (is_array($val)) {
      print_list($val);
    }
  }
  echo '</ul>';
}