首页 > 解决方案 > 将 PHP 多维数组打印为 HTML 列表

问题描述

我有以下 PHP 数组:

stdClass::__set_state(array(
   'channels' => 
  stdClass::__set_state(array(
     'INFORMATIONEN' => 
    array (
      0 => 'welcome',
      1 => 'rules',
      2 => 'contact',
    ),
     'NEWS' => 
    array (
      0 => '✉news',
      1 => 'videos',
    ),
     'TEAM' => 
    array (
      0 => '♠team-lounge',
      1 => 'coding',
      2 => 'bottest',
      3 => 'Besprechung',
      4 => '♠Team Lounge'
    ),
     'LIVE' => 
    array (
      0 => 'Live Stream 1',
      1 => 'Live Stream 2',
    ),
     'RECORD' => 
    array (
      0 => 'Aufnahme 1',
      1 => 'Aufnahme 2',
    ),
     'TK' => 
    array (
      0 => 'Diff',
    ),
     'USER' => 
    array (
      0 => 'lounge-1',
      1 => 'lounge-2',
      2 => 'lounge-3',
      3 => 'Lounge 1',
      4 => 'Lounge 2',
      5 => 'Lounge 3',
    ),
     'Support' => 
    array (
      0 => 'supportticket',
    ),
     'AFK' => 
    array (
      0 => 'AFK',
    ),
  )),
))

这是以下命令的输出:

echo '<pre>' . var_export($decodedChannels, true) . '</pre>';

那是我想在网站上显示的不和谐服务器的频道列表。

它应该显示的基本上是一个嵌套的无序列表,例如:

<ul>
    <li>INFORMATIONEN</li>
    <li>
        <ul>
            <li>Welcome</li>
            <li>rules</li>
            <li>contact</li>
        </ul>
    </li>
    <li>NEWS</li>
    <li>
        <ul>
            <li>News</li>
            <li>Videos</li>
        </ul>
    </li>
</ul>

当然,对于其他数组部分,依此类推。基本上它应该看起来像不和谐......

我进行了很多搜索,发现了各种带有foreach循环、不同想法和所有内容的解决方案,但没有任何效果......要么我只得到了数组的第一层,要么只有键或其他问题......

谁能指出我解决问题的正确想法?

标签: phphtmlarraysmultidimensional-arrayforeach

解决方案


您可以使用递归来嵌套它。您对标题列表有一些不寻常的要求,但这应该可以按您的预期工作。

$data = array(
    'INFORMATIONEN' =>
        array(
            0 => 'welcome',
            1 => 'rules',
            2 => 'contact',
        ),
    'NEWS'          =>
        array(
            0 => '✉news',
            1 => 'videos',
        ),
    'TEAM'          =>
        array(
            0 => '♠team-lounge',
            1 => 'coding',
            2 => 'bottest',
            3 => 'Besprechung',
            4 => '♠Team Lounge'
        ),
    'LIVE'          =>
        array(
            0 => 'Live Stream 1',
            1 => 'Live Stream 2',
        ),
    'RECORD'        =>
        array(
            0 => 'Aufnahme 1',
            1 => 'Aufnahme 2',
        ),
    'TK'            =>
        array(
            0 => 'Diff',
        ),
    'USER'          =>
        array(
            0 => 'lounge-1',
            1 => 'lounge-2',
            2 => 'lounge-3',
            3 => 'Lounge 1',
            4 => 'Lounge 2',
            5 => 'Lounge 3',
        ),
    'Support'       =>
        array(
            0 => 'supportticket',
        ),
    'AFK'           =>
        array(
            0 => 'AFK',
        ),
);

function listArray($array) {
    echo "<ul>\n";
    foreach($array as $key => $value) {
        echo "<li>";
        if(is_array($value)) {
            listArray($value);
        } else {
            echo $value;
        }
        echo "</li>\n";
    }
    echo "</ul>\n";
}

foreach($data as $key => $array) {
    echo "<ul>\n";
    echo "<li>$key</li>\n";
    echo "<li>";
    listArray($array);
    echo "</li>\n";
    echo "</ul>\n";
}

这给出了这个 HTML 输出

<ul>
    <li>INFORMATIONEN</li>
    <li>
        <ul>
            <li>welcome</li>
            <li>rules</li>
            <li>contact</li>
        </ul>
    </li>
</ul>
<ul>
    <li>NEWS</li>
    <li>
        <ul>
            <li>✉news</li>
            <li>videos</li>
        </ul>
    </li>
</ul>
<ul>
    <li>TEAM</li>
    <li>
        <ul>
            <li>♠team-lounge</li>
            <li>coding</li>
            <li>bottest</li>
            <li>Besprechung</li>
            <li>♠Team Lounge</li>
        </ul>
    </li>
</ul>
<ul>
    <li>LIVE</li>
    <li>
        <ul>
            <li>Live Stream 1</li>
            <li>Live Stream 2</li>
        </ul>
    </li>
</ul>
<ul>
    <li>RECORD</li>
    <li>
        <ul>
            <li>Aufnahme 1</li>
            <li>Aufnahme 2</li>
        </ul>
    </li>
</ul>
<ul>
    <li>TK</li>
    <li>
        <ul>
            <li>Diff</li>
        </ul>
    </li>
</ul>
<ul>
    <li>USER</li>
    <li>
        <ul>
            <li>lounge-1</li>
            <li>lounge-2</li>
            <li>lounge-3</li>
            <li>Lounge 1</li>
            <li>Lounge 2</li>
            <li>Lounge 3</li>
        </ul>
    </li>
</ul>
<ul>
    <li>Support</li>
    <li>
        <ul>
            <li>supportticket</li>
        </ul>
    </li>
</ul>
<ul>
    <li>AFK</li>
    <li>
        <ul>
            <li>AFK</li>
        </ul>
    </li>
</ul>

推荐阅读