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



简单的问题。我有一个包含 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 个元素时才有效。我想我可以事先计算它们并在最后一个中关闭(即使它是一个元素的组)。

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

$i = 1;
foreach ($faces as $face)
{
    echo $face;
    if ($i % 3 == 0)
    {
        echo "<br />"; // or some other wrapping thing
    }
    $i++;
}

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

print '<div>';
$i = 1;
foreach ($faces as $face) {
  if ($i % 3 == 0) print '</div><div>';
  echo $face;
  $i++;
}
print '</div>';

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

最新更新