【问题标题】:foreach every 3 put inside a new ulforeach 每 3 放入一个新的 ul
【发布时间】:2015-10-26 17:19:20
【问题描述】:

其实我有这个foreach循环:

<ul>
    <?php foreach ( $tasks as $task ) { ?>
        <li>
            ...
        </li>
    <?php } ?>
</ul>

返回:

<ul>
    <li>...</li>
    <li>...</li>
    <li>...</li>
    <li>...</li>
    ...
</ul>

现在我需要更改循环,将每 3 个&lt;li&gt; 放入一个新的&lt;ul&gt;,这样我就可以拥有:

<div>
    <ul>
        <li>...</li>
        <li>...</li>
        <li>...</li>
    </ul>
    <ul>
        <li>...</li>
        <li>...</li>
        <li>...</li>
    </ul>
    ...
</div>

我必须如何修改 foreach 循环才能达到该结果?

【问题讨论】:

  • 额外的ul 是为了什么?如果是设计问题,请使用 css column-count
  • 你试过了吗?如果句子 a' counter 或者 reset 不是那么难、简单吗?
  • 那么这个问题我们在哪里?

标签: php html arrays foreach


【解决方案1】:

这应该适合你:

只需 array_chunk() 将您的数组分成 3 个块,然后 implode() 每个子数组,例如

<div>
    <?php

    foreach (array_chunk($tasks, 3) as $task) {
        echo "<ul><li>" . implode("</li><li>", $task) . "</li></ul>";
    }

    ?>
</div>

【讨论】:

    【解决方案2】:

    请试试这个..

    <ul>
        <?php foreach ( $tasks as $k=>$task ) { ?>
    
             <?php if($k % 3 == 1) { ?>
             <ul>
             <?php } ?>
            <li></li>
             <?php if($k % 3 == 0) { ?>
             </ul>
             <?php } ?> 
        <?php } ?>
    </ul>
    

    【讨论】:

    • 为什么 OP 应该“试试这个”?一个好的答案总是会解释所做的事情以及这样做的原因,不仅适用于 OP,而且适用于 SO 的未来访问者。
    【解决方案3】:

    我喜欢@Rizer123 的简洁性回答,但如果您希望继续迭代单个项目,而不是分块(例如;如果您需要对单个项目执行一些操作),我建议如下:

    <ul>
        <?php foreach ( array_values($tasks) as $k => $task ) { 
            if($k % 3 == 0) { ?>
            <ul>
            <?php } ?>
            <li>
                ...
            </li>
            if($k % 3 == 2) { ?>
            </ul>
            <?php } ?>
        <?php } ?>
    </ul>
    

    【讨论】:

    • $k 表示数组中每个元素的键(或“索引”),在此代码中,sn-p 将(通过使用 array_values)重置为一系列连续的整数在0
    【解决方案4】:

    试试这个

    foreach (array_chunk($arrays, 3, true) as $array)
    {
        echo '<ul>';
        foreach($array as $value)
        {
             echo "<li>".$value."</li>";
        }
        echo '</ul>';
    }
    

    【讨论】:

    • 为什么 OP 应该“试试这个”?一个好的答案总是会解释所做的事情以及这样做的原因,不仅适用于 OP,而且适用于 SO 的未来访问者。
    猜你喜欢
    • 2011-09-08
    • 2013-01-09
    • 1970-01-01
    • 2013-05-03
    • 2012-09-19
    • 2023-04-11
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多