在PHP中重新启动foreach循环
我有一个产品作为对象的数组。每个对象都包含一个键= 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;?>
所以基本上,如果一个新的类别出现,它应该关闭该行,并开始一个新的行用新的列数。
感谢任何帮助!
如果你不想页面刷新,那么你可以通过使用jQuery或Angular JS来做到这一点。 通过jQuery,你可以通过jquery prepend()函数添加数据,如果你想添加数据在开始或append()函数添加结束部分。
必须有一种方法可以在php脚本中执行此操作。只有我是一个PHP新手。我相信答案很简单,但我的大脑从各种可能性中受到伤害 – webfeuerflo
<?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
}
?>
谢谢! 由于某种原因,我现在只能在3列中得到同一产品的1行。 – webfeuerflo
只要有类别中的产品就应该创建行,这就是$ col的用途。它计算列和后(在我的情况3),它开始一个新的行。 这应该在每个类别中保持不变,只有ist应该打破一行,如果剩下的产品较少(例如该类别中只有两个产品),它应该打破例程并开始一个新行。如果我正确理解你的代码,它会为每个类别创建一个不太正确的行。 – webfeuerflo
我懂了!我必须重置外部foreach中的计数器,现在它正在工作! 谢谢你,你是我的英雄! – webfeuerflo
简单:不要使用'foreach()'。它不是为了重新启动而设计的,但是有了'for'循环,你可以做任何你想做的事情。 – Havenard