2017-02-22 137 views
1

我有一个产品作为对象的数组。每个对象都包含一个键= category_title在PHP中重新启动foreach循环

我有一个foreach循环,在带有可配置列的Bootstrap行中生成产品,在我的示例中为$col=3

我需要的是一个新的行,如果一个新的category_title出现。

我创建了一个数组来推动其中的所有category_titles并创建一个变量,如果它是一个新的类别。但现在我被卡住了。

在foreach看起来是这样的:

<?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;?> 

所以基本上,如果一个新的类别出现,它应该关闭该行,并开始一个新的行用新的列数。

感谢任何帮助!

+0

简单:不要使用'foreach()'。它不是为了重新启动而设计的,但是有了'for'循环,你可以做任何你想做的事情。 – Havenard

回答

0

如果你不想页面刷新,那么你可以通过使用jQuery或Angular JS来做到这一点。 通过jQuery,你可以通过jquery prepend()函数添加数据,如果你想添加数据在开始或append()函数添加结束部分。

+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应该打破一行,如果剩下的产品较少(例如该类别中只有两个产品),它应该打破例程并开始一个新行。如果我正确理解你的代码,它会为每个类别创建一个不太正确的行。 – webfeuerflo

+0

我懂了!我必须重置外部foreach中的计数器,现在它正在工作! 谢谢你,你是我的英雄! – webfeuerflo