在 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 个。我如何包装其中的每三个,而单独包装其余的?我想出了使用switch
和case
,但这仅在只有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循环语句深度理解分析——while, for, foreach, do while