Подсчитайте цикл foreach и создайте новый элемент в php - PullRequest
0 голосов
/ 27 мая 2019

Я работаю над Mega Menu для категории продуктов 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>

Как мне этого добиться?Заранее спасибо за помощь

Ответы [ 4 ]

4 голосов
/ 27 мая 2019

Вы можете использовать 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>
3 голосов
/ 27 мая 2019

Вам необходимо испускать внутреннюю <div class="col-md-6"><ul> и </ul></div> часть каждые три категории.

Вот псевдокод:

  • Emit <div class="row">
  • Установить счетчик, что-то вроде $i = 0
  • Запустите цикл for, foreach ($subCat_of_parent as $subcat) {
  • Теперь произнесите if ($i == 0), испустите начальный тег div и начните ul тег.
  • Создайте элемент списка
  • $i = ($i + 1) % 3
  • Теперь произнесите if ($i == 0), создайте тег закрытия ul и закройте тег div.

Если число подкатегорий не кратно трем, в конце нужна дополнительная логика, чтобы убедиться, что последняя группа правильно закрыта.

1 голос
/ 27 мая 2019

Ниже код работает, вы можете использовать это.

<?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>
1 голос
/ 27 мая 2019
<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...