【问题标题】:PHP - How to wrap every 2 items of a 'for' loop within a divPHP - 如何将“for”循环的每 2 项包装在 div 中
【发布时间】:2020-10-01 00:21:16
【问题描述】:

我正在寻找一种方法来将这个非常基本的 for 循环的每一项都包装在一个 div 中:

<?php 

for( $i=1; $i<=50; $i++ )

{
echo "<div><a href='item-".$i."'>".$i."</a></div>";
}
?>

这会产生以下内容:

<div><a href="item-1">1</a></div>
<div><a href="item-2">2</a></div>
<div><a href="item-3">3</a></div>
<div><a href="item-4">4</a></div>

我需要的输出是:

<div><a href="item-1">1</a> <a href="item-2">2</a></div>
<div><a href="item-3">3</a> <a href="item-4">4</a></div>

谢谢

【问题讨论】:

    标签: php for-loop


    【解决方案1】:

    我能想到的最简单的方法就是这样做。如果您有来自数据库的结果集或项目对象数组,这也适用,只需将 range() 函数替换为数组即可。

    <?php
        
    foreach (array_chunk(range(1, 50), 2) as $chunk) {
    
        echo "<div>";
    
        foreach ($chunk as $itemId) {
            echo "<a href='item-" . $itemId . "'>" . $itemId . "</a>";
    
        }
    
        echo "</div>" . PHP_EOL;
    
    }
    

    【讨论】:

    • 谢谢你,它可以工作并给出我需要的结果。 @Jimmix 解决方案也可以正常工作
    【解决方案2】:

    使用modulo operator

    代码:

    <?php 
    
    $chunks = 2;
    $display = true;
    for( $i=1; $i<=6; $i++ )
    {
        if ($display && ($i % $chunks || $chunks === 1)) {
            echo "<div>";
            $display = false;
            $last = true;
        }
    
        echo "<a href='item-".$i."'>".$i."</a>";
    
        if (!($i % $chunks)) {
            echo "</div>" . PHP_EOL;
            $display = true;
            $last = false;
        }
    }
    
    if ($last) {
        echo "</div>" . PHP_EOL;
    }
    

    生成:

    <div><a href='item-1'>1</a><a href='item-2'>2</a></div>
    <div><a href='item-3'>3</a><a href='item-4'>4</a></div>
    <div><a href='item-5'>5</a><a href='item-6'>6</a></div>
    

    并与:

    $chunks = 3;
    

    你会得到:

    <div><a href='item-1'>1</a><div><a href='item-2'>2</a><a href='item-3'>3</a></div>
    <div><a href='item-4'>4</a><div><a href='item-5'>5</a><a href='item-6'>6</a></div>
    

    等等。

    【讨论】:

    • 如果$i 不是$chunks 的倍数,那将会中断。例如,尝试使用 5 运行它。
    • 也谢谢你@Jimmix 我也喜欢你的解决方案。谢谢你们的时间
    • @NSTK 欢迎您,请接受其中一个答案,以便您的问题被标记为具有令人满意的答案。我认为 OliverO'Neill 的回答更简单、更清晰。
    • 好的,我按照你的建议接受了奥利弗的回答。你让我很容易,因为你们都给了我解决方案,所以我不愿意选择一个而不是另一个 :) 再次感谢你
    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2012-10-27
    相关资源
    最近更新 更多