如何将多维数组转换为ul列表?

时间:2016-03-31 13:16:30

标签: php arrays multidimensional-array

这是我的阵列:

array(1) {
  ["farm"]=>
  array(1) {
    ["animals"]=>
    array(1) {
      [horses]=>
      array(4) {
        ["fred.jpg"]=>
        string(63) "farm/animals/horses/fred.jpg"
        ["sam.jpg"]=>
        string(74) "farm/animals/horses/sam.jpg"
        ["alan.jpg"]=>
        string(64) "farm/animals/horses/alan.jpg"
        ["john.jpg"]=>
        string(63) "farm/animals/horses/john.jpg"
      }
    }
  }
}

我想将其转换为ul列表,因此结果应为:

<ul>
    <li>farm
        <ul>
            <li>animals
                <ul>
                    <li>horses
                        <ul>
                            <li>fred.jpg</li>
                            <li>sam.jpg</li>
                            <li>alan.jpg</li>
                            <li>john.jpg</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

我使用了这个功能:

function array2ul($array) {
  $output = '<ul>';
  foreach ($array as $key => $value) {
    $function = is_array($value) ? __FUNCTION__ : 'htmlspecialchars';
    $output .= '<li>' . $key . '</li>';
  }
  return $output . '</ul>';
}

但结果是:

<ul>
        <li>farm
            <ul>
                <li>animals
                    <ul>
                        <li>horses
                            <ul>
                                <li>fred.jpg</li>
                                <li>farm/animals/horses/sam.jpg</li>
                                <li>farm/animals/horses/alan.jpg</li>
                                <li>farm/animals/horses/john.jpg</li>
                            </ul>   
                        </li>
                    </ul>
                 </li>
            </ul>
        </li>
    </ul>

1 个答案:

答案 0 :(得分:6)

你必须使用递归函数:

function recursiveArrayToList(Array $array = array())
{
    echo '<ul>';
    foreach ($array as $key => $value) {
        echo '<li>' . $key . '</li>';

        if (is_array($value)) {
             recursiveArrayToList($value);
        }
    }
    echo '</ul>';
}

recursiveArrayToList($initialArray);