добавить div в цикл foreach?

#php

#php

Вопрос:

 <?php foreach ($fields as $id => $field): ?>
<div class="<?php print $field->class; ?>">
 <?php print $field->content; ?>
 </div>
<?php endforeach; ?>
  

результат цикла выглядит следующим образом,

    <div class="1">.....</div>
   <div class="2">.....</div>
   <div class="3">.....</div>
   <div class="4">.....</div>


   <div class="1">.....</div>
   <div class="2">.....</div>
   <div class="3">.....</div>
   <div class="4">.....</div>

   <div class="1">.....</div>
   <div class="2">.....</div>
   <div class="3">.....</div>
   <div class="4">.....</div>
  

я хочу сгруппировать первый <div> следующим образом.

     <div class="group">
   <div class="1">.....</div>
   <div class="2">.....</div>
   <div class="3">.....</div>
   </div>
  <div class="4">.....</div>
  

как сделать предварительный

Ответ №1:

должно быть похоже, просто используйте foreach вместо for

 <style>
    .group{
        background: red;
        margin-top: 10px;
        float: left;
        }
</style>
<?php $count=0; ?>
    <?php for($i=0; $i<= 20; $i  ): ?>
    <?php if($count == 0): ?>
        <div class="group">
    <?php endif; ?>
        <?php $count   ?>
        <div class="<?php echo $i; ?>"><?php echo $i; ?></div>
    <?php if($count == 4): ?>
        <?php $count=0; ?>
        </div>
    <?php endif; ?>
<?php endfor; ?>
  

Ответ №2:

Если ваша $field->class переменная всегда находится в диапазоне от 1 до 4, вы можете сделать следующее. В противном случае вам нужно использовать ручной счетчик.

 <?php foreach ($fields as $id => $field): ?>
    <?php if ($field->class == 1) :?> <div class="group"> <?php endif; ?>
    <div class="<?php print $field->class; ?>">
      <?php print $field->content; ?>
    </div>
    <?php if ($field->class == 4) :?> </div> <?php endif; ?>
<?php endforeach; ?>
  

Пользовательский счетчик

 <?php $counter = 0; ?>
<?php foreach ($fields as $id => $field): $counter  ;?>
    <?php if ($counter == 1) :?> <div class="group"> <?php endif; ?>
    <div class="<?php print $field->class; ?>">
      <?php print $field->content; ?>
    </div>
    <?php if ($counter == 4) : $counter = 1?> 
        </div> 
    <?php endif; ?>
<?php endforeach; ?>
  

Комментарии:

1. <?php endif; $counter = 1 ?>, почему код добавляет $ counter = 1 , спасибо.

2. Извините, это должно быть внутри условия, а не снаружи. Исправлено. Вы должны использовать этот метод, только если имя вашего класса может отличаться.

3. я все еще не знаю, зачем добавлять $counter = 1<?php if ($counter == 4): $counter = 1?> в этой строке

4. По сути, это сбрасывает счетчик на 1 каждый раз, когда он достигает 4. Поскольку вы хотите, чтобы DIVS были сгруппированы по 4.

Ответ №3:

попробуйте (необработанный код)

 <div class="group">
<?php $c=0; foreach ($fields as $id => $field) : ?>
<?php if($c%3==0) : ?> </div><div class="group"><?php endif; ?>
        <div class="<?php print $field->class; ?>">
           <?php print $field->content; ?>
       </div>
<?php $c  ; endforeach; ?>
</div>
  

Комментарии:

1. и как добавить закрытый </div>

2. Это потому, что на самом деле это не закрывает групповой div. Пожалуйста, исправьте свой ответ

3. ДжонП, $fields является ассоциативным массивом, если $ id не является числом. этот $id%4==0 будет бесполезен.

4. @zhuanzhou, тогда просто определите $c=0 и $c внутри foreach обновите мой ответ