在 PHP 中的 while / foreach 内包装 3 个或更少的对象

Posted

技术标签:

【中文标题】在 PHP 中的 while / foreach 内包装 3 个或更少的对象【英文标题】:Wrapping 3 objects or less inside a while / foreach in PHP 【发布时间】:2012-07-01 09:43:23 【问题描述】:

简单的问题。我有一个包含 21 个元素的数组,并在 <div> 块中显示它们中的每三个。代码是这样的东西

<?php
$faces= array(
  1 => 'happy',
  2 => 'sad',
  (sic)
  21 => 'angry'
);

$i = 1;
foreach ($faces as $face) 
  echo $face;
  $i++;


?>

问题出在这个数组没有 21 个元素时,有时它有 24 个,有时有 17 个。我如何包装其中的每三个,而单独包装其余的?我想出了使用switchcase,但这仅在只有21 个元素时才有效。我想我可以count them beforehand 并在最后一个结束(即使它是一组一个元素)。

【问题讨论】:

【参考方案1】:

你已经在这里拥有了大部分。您所缺少的只是测试您是否准备好包装。因此,在增加 $i 之前,请尝试:

$i = 1;

foreach ($faces as $face)

    echo $face;

    if ($i % 3 == 0)
    
        echo "<br />"; // or some other wrapping thing
    
    $i++;

这将确保您每 3 个面包装一次,将剩余部分留在最后一个单元中。

【讨论】:

您还需要else 进行非包装 我不这么认为。 Wraps 是一个动作,如果你不 wrap 你基本上是在正常做某事。除非您必须包装(除非您以这种方式设计代码),否则您不需要做任何事情。 啊,你是对的,现在可能需要睡觉了,已经太晚了,凌晨 2:30,不过 +1。【参考方案2】:
print '<div>';
$i = 1;
foreach ($faces as $face) 
  if ($i % 3 == 0) print '</div><div>';
  echo $face;
  $i++;

print '</div>';

【讨论】:

【参考方案3】:

我会使用array_chunk。您可以将数组分成三个一组的多维数组。如果元素的数量不是三的倍数,则最后一个元素将包含所有剩余的子元素,无论它们有多少。

【讨论】:

+1 很惊讶它没有得到支持,特别是因为 OP 需要一个后续问题才能完全满足他的回答;首先使用 array_chunk 可能已经解决了足够复杂的问题,让他自己解决;-)

以上是关于在 PHP 中的 while / foreach 内包装 3 个或更少的对象的主要内容,如果未能解决你的问题,请参考以下文章

php while循环和foreach循环 mysql_fetch_array()

php foreachwhile性能比较

foreach 循环内的 while 循环仅返回 1 行

PHP循环语句深度理解分析——while, for, foreach, do while

for vs foreach vs while 哪个在 php 中遍历数组更快

PHP while 循环