如何在foreach中使用optgroup?

时间:2015-03-15 00:49:04

标签: php

在我的选择框中,我试图这样做:

Maincategory name
   subcat
   subcat
   subcat
anothermain category
    subcat
    subcat

这是我目前的代码:

<select name="categories" class="form-control col-sm-12">
    <?php foreach(ProductModel::categories() as $category): ?>
      <option value="<?=System::escape($category->sub_category); ?>"><?=System::escape($category->sub_category); ?></option>
    <?php endforeach; ?>
</select>

想在所有子猫上显示主要的cate名称,如

maincate:subcat
maincate:subcat
maincate:subcat

这是我的表:

enter image description here

我该怎么做呢?如果在foreach show cat name中有5个,我就不能这样做,因为我在每只主猫中都不会有相同数量的子序列

1 个答案:

答案 0 :(得分:0)

如果我理解正确,在每个循环之前,你可以为当前主类别名称分配一个变量(从null开始),然后每次迭代时检查它是否与当前条目的主要匹配类别。如果没有,请让它关闭先前的optgroup并为主类别打开一个新的optgroup,然后为当前的子类别打开另一个optgroup。然后将变量分配给当前的主类别值,你应该好好去。如果变量未定义(即第一次'回合),你可能会跳过关闭标记。

这样的事情:

所以:

<select name="categories" class="form-control col-sm-12">
    <?php 
         $i = 0;
         $mainCatName = '';
         foreach(ProductModel::categories() as $category): 
         if($category->main_category != $mainCatName {
             $mainCatName = $category->main_category;
             if($i = 0) { ?>
                <optgroup label="<?php echo $category->main_category ?>">
             <?php } else {
                 </optgroup>
                 <optgroup label="<?php echo $category->main_category ?>">
             <?php }
         }
          ?>
      <option value="<?=System::escape($category->sub_category); ?>"><?=System::escape($category->sub_category); ?></option>
      <?php if($i = count(count(ProductModel::categories()) { ?>
         </optgroup>
      <?php } 
      $i++;?>
    <?php endforeach; ?>
</select>