2017-02-22 8 views
1

私はオブジェクトとしてオブジェクトを持つ配列を持っています。各オブジェクトにはkey = category_titleが含まれていますPHPでforeachループを再起動

設定可能な列を持つブートストラップ行に製品を生成するforeachループがあります。私のケースでは$col=3です。

私が必要とするのは、新しいcategory_titleが現れた場合に新しい行を作成することです。

category_titlesをすべて入れて、新しいカテゴリの場合は変数を作成するための配列を作成しました。しかし今、私は立ち往生しています。

<?php foreach($productspercat as $product):   ?> 


      <!-- Make sure product is enabled and visible @front end --> 
      <?php // if($product->enabled && $product->visibility):?> 
       <?php 

        $catnew = false; 
       $categorytitle = $product->category_title; 
       if(!in_array($categorytitle, $totalcategories, true)):?> 
        <?php    array_push($totalcategories,$categorytitle); 
        $catnew=true; 
      ?> 
       <?php endif;?> 
    <div class="j2store-products-row <?php echo 'row-'.$row; ?> row"> 
        <?php endif;?> 

        <div class="col-sm-<?php echo round((12/$col));?>"> 
         <h2><?php echo $categorytitle; ; 
         var_dump($catnew); 
         ?></h2> 
         test 
        </div> 
      <?php $counter++; 
      $firstrun = true; ?> 
      <?php if (($rowcount == $col) or ($counter == $total)) : ?> 
      </div> 
     <?php endif; ?> 

    <?php // endif; ?> 
<?php endforeach;?> 

新しいカテゴリがアップするのであれば基本的に、それは行を閉じ、新しい列数と新鮮な行を開始する必要があります:

foreachのは、次のようになります。

ありがとうございます!

+0

簡単: 'foreach()'を使用しないでください。これは再起動するようには設計されていませんが、通常の 'for'ループでは何でもできます。 – Havenard

答えて

0

ページをリフレッシュしたくない場合は、jQueryまたはAngular JSを使用してリフレッシュすることができます。 jQueryではbeginまたはappend()関数でデータを追加して終了セクションを追加する場合は、jquery prepend()関数でデータを追加できます。

+0

phpスクリプトでこれを行う方法が必要です。私はPHP初心者です。私は答えが非常に簡単だと確信していますが、私の脳はすべての可能性から痛い – webfeuerflo

0
<?php 
// Arranged products by category title 
$arrangedProducts = array() 
foreach($productspercat as $product) { 
    if (!array_key_exists($product->category_title, $arrangedProducts)) { 
     $arrangedProducts[$product->category_title] = array(); 
    } 

    $arrangedProducts[$product->category_title][] = $product; 
} 

// each category is a key and its value is an array with all its products 
foreach ($arrangedProducts as $categoryTitle => $products) { 
    // you create a new row 
    // .... 
    foreach ($products as $product) { 
     // you display product information 
    } 

    // you end the row 
} 
?> 
+0

ありがとう! 何らかの理由で、私は今3列で同じ製品で1行しか得られません。 – webfeuerflo

+0

これは、カテゴリに商品がある限り行を作成する必要があります。これは$ colのためです。それは列をカウントし、その後(私の場合は3)、新しい行を開始します。 これは各カテゴリ内で同じままでなければなりません。istは行を分割する必要があります。残っている製品が少ない場合(たとえばカテゴリに2つの製品しかない場合)、ルーチンを中断して新しい行を開始する必要があります。私はあなたのコードを正しく理解していれば、カテゴリごとに行が作成されますが、これは正しくありません。 – webfeuerflo

+0

私はそれを得た!私は外のforeachのカウンターをリセットしなければならなかった、そして今それは働いている! ありがとう、あなたは私のヒーローです! – webfeuerflo