【问题标题】:Print PHP Mutlidimensional Array as HTML List将 PHP 多维数组打印为 HTML 列表
【发布时间】:2021-03-21 17:21:37
【问题描述】:

我有以下 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循环的各种解决方案,不同的想法和一切,但没有任何效果......要么我只得到了数组的第一层,要么只有键或其他问题......

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

【问题讨论】:

  • 神奇的词是recursion
  • @MarkusZeller 是的,我试过了,就像这里的 stackoverflow.com/a/24865996/3375021 或这里的 stackoverflow.com/a/6260587/3375021... 但它对我不起作用...
  • 你尝试过什么,什么对你不起作用?您实际上必须复制链接中提到的函数 ToUl 并将数组传递给函数。它创建除了一个额外的li 之外的所有内容,例如'INFORMATIONEN'
  • @DefinitelynotRafal 我复制粘贴ToUl 函数得到的唯一结果是数字1.. 没有别的.. 根本没有元素...无论出于何种原因..(在ul 内, 没有li)

标签: php html arrays multidimensional-array foreach


【解决方案1】:

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

$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>

【讨论】:

  • 感谢您的回答..由于某种原因,我没有显示键,所以我只得到子元素而不是父元素(来自不和谐的类别)......还有,在最上面,我得到了“通道”,因为它是数组的根,我能以某种方式抓住它下面的所有东西吗?
  • 试试$data = $yourObject-&gt;channels。我无法重建stdClass,所以为了方便起见,我转换为数组。您还可以将对象转换为数组,例如$data = (array)$yourObject; var_dump($data['channels'])
  • 是的,就是这样! :) 非常感谢! :)
猜你喜欢
  • 2013-02-28
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
相关资源
最近更新 更多