【问题标题】:Count a foreach loop and create new element in php计算一个foreach循环并在php中创建新元素
【发布时间】:2019-05-27 04:25:05
【问题描述】:

我正在为 WooCommerce 产品类别制作超级菜单。我可以使用下面的代码获取所有子类别的列表;

$parent_id = 37; //ID of the Parent Category
$subCat_of_parent = get_terms('product_cat',array('child_of' => $parent_id));

然后用在下面的html结构中;

<div class="row">
    <div class="col-md-6">
        <ul>
        <?php
        foreach ($subCat_of_parent as $subcat) {
            ?>
            <li>
                <a href="<?php echo get_category_link($subcat->term_id); ?>"><?php echo $subcat->name; ?></a>
            </li>
            <?php
        }
         ?>
        </ul>
    </div>
</div>

这是通过以这种格式获取父类别的所有子类别列表来实现的;

<div class="row">
    <div class="col-md-6">
        <ul>
           <li><a>1st subcategory</a></li>
           <li><a>2nd subcategory</a></li>
           <li><a>3rd subcategory</a></li>
           <li><a>4th subcategory</a></li>
           <li><a>5th subcategory</a></li>
           <li><a>6th subcategory</a></li>
        </ul>
    <div>
</div>

我想要实现的是在第 3 个子类别之后,它应该在新列上中断并继续,这样我就可以得到这样的东西;

<div class="row">
    <div class="col-md-6">
        <ul>
           <li><a>1st subcategory</a></li>
           <li><a>2nd subcategory</a></li>
           <li><a>3rd subcategory</a></li>
        </ul>
    <div>

    <div class="col-md-6">
        <ul>
           <li><a>4th subcategory</a></li>
           <li><a>5th subcategory</a></li>
           <li><a>6th subcategory</a></li>
        </ul>
    <div>
</div>

我怎样才能做到这一点?提前感谢您的帮助

【问题讨论】:

    标签: php wordpress woocommerce foreach


    【解决方案1】:

    您可以使用array_chunk() 将数组分成 3 个组。

    <div class="row">
    
    <?php
    
        $chunks = array_chunk($subCat_of_parent, 3);
    
        foreach ($chunks as $group) {
            print '<div class="col-md-6">';
            print '<ul>';
    
            foreach ($group as $subcat) {
                print '<li>';
                    //to-do
                print '</li>';
            }
    
            print '</ul>';
            print '</div>';
        }
    
    ?>
    
    </div>
    

    【讨论】:

      【解决方案2】:

      您需要每三个类别发出内部&lt;div class="col-md-6"&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt; 部分。

      这是伪代码:

      • 发射&lt;div class="row"&gt;
      • 设置一个计数器,例如$i = 0
      • 开始你的 for 循环,foreach ($subCat_of_parent as $subcat) {
      • 现在说if ($i == 0),发出开始div 标记并开始ul 标记。
      • 发出您的列表项
      • $i = ($i + 1) % 3
      • 现在说if ($i == 0),发出关闭ul标签并关闭div标签。

      如果子类别的数量不是三的倍数,则最后需要额外的逻辑以确保正确关闭最后一组。

      【讨论】:

      • 感谢@Ray 的故障,我能够在您故障后让它工作
      【解决方案3】:
      <?php
      $arr = array(1, 2, 3, 4,5,6);
              $count = 0;
      ?>
          <div class="row">
          <?php
              foreach ($subCat_of_parent as $subcat) 
              {
                  // echo "count =".$count;
                  if($count%3 == 0)
                  {
                   echo ('<div class="col-md-6">
                      <ul>');
                  }
                  $count++;
          ?>
                  <li>
                      <a href="<?php echo get_category_link($subcat->term_id); ?>"><?php echo $subcat->name; ?></a>
                  </li>
      
          <?php
                  if($count%3 == 0)
                  {
                   echo ('
                      </ul></div>');
                  }
      
              }
          ?>
          </div>
      

      【讨论】:

        【解决方案4】:

        下面的代码正在运行,你可以使用它。

        <?php
        $subCat_of_parent = array('1st sub', '2nd sub', '3rd sub', '4th sub', '5 sub', '6 sub', '7 sub');
        $subCat_of_parent = array_chunk($subCat_of_parent, 3);
        ?>
        <div class="row">
            <?php
            foreach ($subCat_of_parent as $subcats) {
            ?>
                <div class="col-md-6">
                    <ul>
                    <?php
                    foreach ($subcats as $subcat) {
                        ?>
                        <li><a href="#"><?php echo $subcat; ?></a></li>
                        <?php
                    }
                    ?>
                    </ul>
                </div>        
            <?php
            }
            ?>
        </div>
        

        【讨论】:

        • 行测试后出现代码错误(错误:可恢复的致命错误:WP_Term 类的对象无法转换为字符串).. 我已经编辑了你的答案使它没有错误地工作
        猜你喜欢
        相关资源
        最近更新 更多
        热门标签