2

使用数学运算符应用包装对象后,我只是认为它会结束。但不是。到目前为止。

<?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">(由于设计原因,后面的 br 将无法解决)。我想我会回去应用一个开关,但如果有人在数组中放入更多开关可以正确包装的元素,最后两个剩余的元素将被公开包装。

我可以将“广告”添加到第三个位置的数组中吗?这会让事情变得更简单,只让我猜测如何包装第一个和第三个,第四个和第六个,依此类推。

4

2 回答 2

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 />';
}
于 2012-06-30T03:27:42.423 回答
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 关于使用比较运算符而不是赋值的注释将有助于弄清楚你的包装。

于 2012-06-30T02:59:31.867 回答