【问题标题】:Wrapping a div around every third item in a foreach loop PHP [closed]在foreach循环PHP中每隔三个项目包装一个div [关闭]
【发布时间】:2012-10-27 13:50:45
【问题描述】:
//set the array
$info = array(
'andy' => 'blue',
'andrew' => 'black',
'mark' => 'green',
'jane' => 'orange',
'simon' => 'red',
'joan' => 'pink',
'sue' => 'yellow',
'alan' => 'black') 


$i = 1;

foreach($info as $key => $val){

    <div class="holder">
        <div class="name">
            <?php echo $Name ?> 
        </div>
        <div class="colour">
            <?php echo $colour ?> 
        </div>
    </div>
} 

这显示了每个“持有人”类......但我想要做的是在“持有人”类周围包装一个容器,并在每个“容器”中有 3 个“持有人”。 例如:

<div class="container">
    <div class="holder">
            <div class="name">
                <?php echo $Name ?> 
            </div>
            <div class="colour">
                <?php echo $colour ?> 
            </div>
        </div>
    <div class="holder">
            <div class="name">
                <?php echo $Name ?> 
            </div>
            <div class="colour">
                <?php echo $colour ?> 
            </div>
        </div>
    <div class="holder">
            <div class="name">
                <?php echo $Name ?> 
            </div>
            <div class="colour">
                <?php echo $colour ?> 
            </div>
        </div>
</div>

我不知道如何获取关联数组的索引,或者如何在 %3 == 0 后打破 foreach 循环。

任何建议都会很棒!

-Ved

【问题讨论】:

  • 所以您实际上是在询问如何在每次迭代时增加$i 变量?不是真的,不是吗?
  • 我可以通过将 i++ 放入 foreach 中轻松地增加。我只是不能在 $i % 3 时将其分开
  • 查看 Gordon 在他的评论中的链接。实际上两个链接。该功能很容易工作,看起来就像您正在寻找的一样。

标签: php arrays loops foreach


【解决方案1】:

你在找这个吗? php.net/array_chunk

而且,你有一些语法错误

foreach($info as $key => $val){

这应该是

foreach($info as $key => $val){ ?>

关闭 php 以启动 HTML 标记

【讨论】:

  • 我想这就是我需要的!我以前从未见过array_chunk。非常感谢:)
  • 这个解决方案更好。简单而专业!
【解决方案2】:

你需要有一个单独的计数器变量:

$i = 0;
foreach($info as $key => $val){
  if($i%3 == 0) {
    echo $i > 0 ? "</div>" : ""; // close div if it's not the first
    echo "<div class='container'>";
  }
  ?>
    <div class="holder">
        <div class="name">
            <?php echo $Name ?> 
        </div>
        <div class="colour">
            <?php echo $colour ?> 
        </div>
    </div>
<?php
$i++;
}
?>
</div> <!-- close last container div -->

【讨论】:

  • 事实证明,你的解决方案是我的解决方案。感谢您的帮助
  • @chiborg,此代码不会生成完全正确的 HTML。对于最后一次迭代,容器标签仍有待关闭。你知道怎么解决吗?
  • @ParthVora 你看到最后一行了吗?在任何情况下都应该关闭容器($info 为空时除外)。
【解决方案3】:

您可以在 foreach 循环中增加 $i 它,例如:

$i = 0;
foreach ($info as $key => $val) {
    if ($i % 3 == 0) {
        ...
    } else {
        ...
    }
    $i++;
}

【讨论】:

  • 当我这样做并将“容器”div 放入其中时,它只会包裹一个支架,而不是 3 个“支架”。
  • @Ved:您应该在 ($i % 3 == 0) 时打开容器 div,并在 ($i % 3 == 2) 时关闭它。从您的上述评论看来,您在同一迭代中同时进行这两项操作。
  • 使用这个解决方案可以解决。 chandansharma.co.in/…
【解决方案4】:

在这种情况下,您会想做这样的事情。确保变量正确。

$i = 1;

foreach($info as $key => $val){
    if ($i % 3 == 0) {
         ?>
         <div name='container'>
         <?php
    }
    ?>
    <div class="holder">
        <div class="name">
            <?php echo $key; ?> 
        </div>
        <div class="colour">
            <?php echo $val; ?> 
        </div>
    </div>

    if ($i % 3 == 2) {
         ?>
         </div>
         <?php
    }

    <?php
    $i++;
} 

【讨论】:

  • 我认为 array_chunk 是我需要的功能。谢谢大家的cmets :D
  • 然后检查 Prakash 的答案作为答案。他会很感激的。
  • @Martin,我认为这里的 $i 应该初始化为 0 而不是 1。此外,它会为最后一个元素保留一个未完成的容器标签。你知道怎么解决吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多