【问题标题】:Wrapping 3 objects or less inside a while / foreach in PHP在 PHP 中的 while / foreach 内包装 3 个或更少的对象
【发布时间】: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 并在最后一个结束(即使它是一组一个元素)。

【问题讨论】:

    标签: php arrays loops foreach while-loop


    【解决方案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 可能已经解决了足够复杂的问题,让他自己解决;-)
      猜你喜欢
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多