一个循环(while / foreach),带有“offset”包装和

时间:2012-06-30 02:33:02

标签: php arrays loops foreach while-loop

在应用了wrapping objects using math operator之后,我认为它将会结束。但不是。到目前为止。

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

$i = 1;
foreach ($faces as $face) {
  echo $face;
  if ($i == 3) echo '<div class="block">This is and ad</div>';
  if ($i % 3 == 0)  {
    echo "<br />"; // or some other wrapping thing
  }
  $i++;
}

?>

在我必须放置的代码和第二个之后的广告中,成为第三个对象。然后将这三个全部包裹在<div class="row">中(之后由于设计原因而无法解决)。我以为我会回去应用一个开关,但是如果有人在数组中添加了更多元素,交换机可以正确包装,那么最后剩下的两个元素将被公开包装。

我可以在第三个位置向阵列添加“广告”吗?这会让事情变得简单,只会让我猜测如何包装第一个和第三个,第四个和第六个,等等。

2 个答案:

答案 0 :(得分:1)

你可以将数组分成两部分,插入你的广告然后追加其余部分:

// Figure out what your ad looks like:
$yourAd = '<div class="block">This is and ad</div>';

// Get the first two:
$before = array_slice($faces, 0, 2);
// Get everything else:
$after = array_slice($faces, 2);
// Combine them with the ad. Note that we're casting the ad string to an array.
$withAds = array_merge($before, (array)$yourAd, $after);

我认为nickb关于使用比较运算符而不是赋值的说明将有助于解决问题。

答案 1 :(得分:1)

首先,插入广告:

array_splice($faces, 2, 0, array('<div class="block">this is an ad</div>'));

然后,应用包装:

foreach (array_chunk($faces, 3) as $chunk) {
    foreach ($chunk as $face) {
        echo $face;
    }
    echo '<br />';
}