【问题标题】:Wrap every three items in a div, complete even if the element count does not divide by 3 [duplicate]将每三个项目包装在一个 div 中,即使元素数不除以 3 也可以完成 [重复]
【发布时间】:2015-08-04 14:23:14
【问题描述】:

我正在通过一个相当简单的foreach 循环来输出链接列表:

foreach ($pages as $page){
   echo '<a href="'.$page['guid'].'">'.$page['post_title'].'</a>';
}

目前有8项正在输出。

我需要包装这些项目,使它们看起来像这样:

<div class="grid one-third">
   <ul>
      <li>Sitemap</li>
      <li>Sitemap</li>
      <li>Sitemap</li>
   </ul>
</div>
<div class="grid one-third">
   <ul>
      <li>Sitemap</li>
      <li>Sitemap</li>
      <li>Sitemap</li>
   </ul>
</div>
<div class="grid one-third">
   <ul>
      <li>Sitemap</li>
      <li>Sitemap</li>
   </ul>
</div>

如您所见,它将every third item 包装在.grid .one-third 和一个新的ul

但我不想根据 3 的计数器来匹配它,因为当项目的数量不能被三整除(例如 8 项目)时,这会失败。

我正在尝试使用模运算符来分隔每 3 个项目,但我似乎得到了嵌套的 div,而不是在正确的位置关闭 div。到目前为止,这是我的解决方案:

foreach ($pages as $page){
$page = (array)$page;
   echo '<li><a href="'.$page['guid'].'">'.$page['post_title'].'</a></li>';
   if ($counter && $counter % 3 === 0){
      echo '</ul><div class="grid one-third"><ul>';
   }
   $counter++;
}

有什么想法可以让我在&lt;div class="grid one-third&gt;&lt;ul&gt; 中正确包装每 3 个项目(或最后包装)吗?

【问题讨论】:

  • array_chunk($array,3)
  • 我喜欢@splash58 的解决方案:将你的线性数组转换为数组数组,然后使用两个嵌套的foreach() 循环。
  • 是的。它给出了包装元素的精细结构和位置
  • @splash58 你能按照上面的代码展示你的解决方案吗?我无法准确计算 array_chunk 如何划分数据
  • @Francesca 它与您的数据无关。该代码从一组 tds 构建一个表,但是,我希望这个想法很清楚 eval.in/411954

标签: php foreach


【解决方案1】:

您只需要在循环结束时添加一些额外的条件来检查循环中断的位置。

例如

while(...) {
    ... logic to start a new div if necessary
    ... output a row of data
    ... logic to end a full div
}
if (loop ended with open div) {
   ... end the final div
}

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2011-03-22
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多