PHP 将数组拆分为 3 个单独的 UL 和列

Jam*_*esG 1 php arrays

我无法确定我需要实现的逻辑

在网页上,我有一个从一组结果动态生成的数组。数组计数可以是任何数字。例如,在一页上可能有 11 个项目,而在另一页上可能有 211 个。

我需要的是将其分成 3 列和 3 个 UL。

假设数组包含 23 个项目,所需的输出是:

    <div class="column">
        <ul>
            <li>Item 1</li>
            <li>Item 2</li>
            <li>Item 3</li>
            <li>Item 4</li>
            <li>Item 5</li>
            <li>Item 6</li>
            <li>Item 7</li>
            <li>Item 8</li>
        </ul>
    </div>
    <div class="column">
        <ul>
            <li>Item 9</li>
            <li>Item 10</li>
            <li>Item 11</li>
            <li>Item 12</li>
            <li>Item 13</li>
            <li>Item 14</li>
            <li>Item 15</li>
            <li>Item 16</li>
        </ul>
    </div>
    <div class="column">
        <ul>
            <li>Item 17</li>
            <li>Item 18</li>
            <li>Item 19</li>
            <li>Item 20</li>
            <li>Item 21</li>
            <li>Item 22</li>
            <li>Item 23</li>
        </ul>
    </div>
Run Code Online (Sandbox Code Playgroud)

项目按顺序排列的地方,它们尽可能平均地分开。如果有一个奇数,那很好,因为如上所示,最后一列会更少。

我试过使用 array_chunk()

$ar_list = array("<li>Item 1</li>","<li>Item 2</li>","<li>Item 3</li>","<li>Item 4</li>","<li>Item 5</li>");
$lists = array_chunk($ar_list, 3);



foreach ($lists as $list) {
  echo '<ul>';
  echo $list;
  echo '</ul>';
}
Run Code Online (Sandbox Code Playgroud)

但是,这将返回:

大批

大批

大批

大批

大批

有人可以帮我获取: $ar_list 的内容以输出所需的效果吗?

先感谢您

Kod*_*son 5

该函数的$size参数array_chunk实际上是每个chunk的item数,而不是chunk的个数。为了得到三个,您应该首先通过将数组的大小除以 3 来计算每个块中的项目数,然后在array_chunk函数中使用该计数,四舍五入。当您遍历数组时,您需要一个嵌套循环来输出每列的每个列表项。

像这样:

<?php

$ar_list = array("<li>Item 1</li>","<li>Item 2</li>","<li>Item 3</li>","<li>Item 4</li>","<li>Item 5</li>");
$rows = ceil(count($ar_list) / 3);
$lists  = array_chunk($ar_list, $rows);

foreach ( $lists as $column) {
    echo '<ul>';
    foreach ($column as $item) {
        echo $item;
    }
    echo '</ul>';
}
Run Code Online (Sandbox Code Playgroud)