计算一个foreach循环并在php

时间:2019-05-27 04:25:05

标签: php wordpress woocommerce foreach

我正在为WooCommerce产品类别创建Mega菜单。我可以使用以下代码获取所有子类别的列表;

$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>

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

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

我该如何实现?感谢您的提前帮助

4 个答案:

答案 0 :(得分:4)

您可以使用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>

答案 1 :(得分:3)

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

这是伪代码:

  • 发射<div class="row">
  • 设置一个计数器,类似$i = 0
  • 开始您的for循环,foreach ($subCat_of_parent as $subcat) {
  • 现在说if ($i == 0),发出开始div标签并开始ul标签。
  • 发送您的列表项
  • $i = ($i + 1) % 3
  • 现在说if ($i == 0),发出close ul标签并关闭div标签。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

下面的代码有效,您可以使用它。

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