0

PHP foreach ループをコーディングしています。次のコードを使用して、3 つの項目のみが .slide div コンテナーにグループ化されるようにしています。

<?php 
$count = 0;
foreach ($listing as $item):?>
<div class='slide>

  <div class='item'>Item</div>

<?php if ($count++ % 3 == 1 ): ?>
</div>
<div class="slide">
<?php endif; ?>

<?php endforeach ?>

グループごとに常に3つのアイテムが必要です。配列の先頭からアイテムを追加して残りのアイテムを埋める最良の方法は何ですか?

編集

必要なマークアップの例は次のとおりです。

<div class='slide'>
  <div class='item'>Item 1</div>
  <div class='item'>Item 2</div>
  <div class='item'>Item 3</div>
</div>
<div class='slide'>
  <div class='item'>Item 4</div>
  <div class='item'>Item 1</div>
  <div class='item'>Item 2</div>
</div>

そのため、.slide ごとに 3 つの項目がない場合、配列が再び開始されていっぱいになります。

4

2 に答える 2

3

最近 Bootstrap でこれを行う必要があり、3 列ごとに行をラップしましたが、うまく機能する答えが見つからなかったので、ここに私が思いついた解決策があります。それが役に立てば幸い。

<?php
$count = 0;
foreach ($listing as $item) {
  if ($count % 3 == 0) {
    echo "<div class='slide'>";
  }
  $count++;
?>
<div class='item'>Item</div>
<?php
  if ($count % 3 == 0) {
    echo "</div>";
  }
}
?>

これらのリンクは、何が起こっているのかを理解できるように演算子を説明するのに役立ちます:

PHP 算術演算子(% = モジュラス)

インクリメント/デクリメント演算子(++ = 後置インクリメント)

于 2013-08-13T01:12:08.407 に答える
1

$listing簡単な解決策の 1 つは、ループの前に1 つまたは 2 つの項目 (必要な場合) を変数に追加することです。

if (count($listing)%3!=0) {
    //Append 1 or 2 items from start of array if needed
    $listing = array_merge($listing, array_slice($listing, 0, 3-count($listing)%3));
}

この呼び出しは、項目から項目(1 または 2)array_sliceを含む配列を返します。関数は、これらの1 つまたは 2 つの項目を元の配列に追加します。完全なコード (いくつかのマイナーな改善/修正を含む) は以下のとおりです。03 - (size of array) mod 3array_merge$listing

<?php 
    $count = 0;
    $listing = array(1, 2, 3, 4, 5, 6, 7);
    if (count($listing)%3!=0) {
        //Append 1 or 2 items from start of array if needed
        $listing = array_merge($listing, array_slice($listing, 0, 3-count($listing)%3));
    }
    ?><div class='slide'> <?php
    foreach ($listing as $item):
        if (($count>0) and ($count%3==0)):
            ?></div><div class="slide"><?php
        endif; 
        ?><div class='item'>Item <?=$item?></div><?php
        $count++;
    endforeach;
    ?></div><?php
?>

データによっては、元の$listingアイテムが 0 個または 1 個の場合に特別なチェックを追加する必要がある場合があります。また、おそらく元の配列を変更せず、代わりにコピーを使用して項目を追加し、 foreach ループで使用することをお勧めします。

于 2012-08-01T23:13:48.787 に答える