показать разделитель в нижней части цикла, за исключением последнего элемента

#php #loops #foreach

#php #циклы #foreach

Вопрос:

Итак, я знаю, что это просто, но я некоторое время бился головой о стену, пытаясь разобраться в этом. Я хочу показать линейку в нижней части моего цикла для каждого из них, кроме последнего. Я могу заставить его работать, если у меня есть точное количество записей, но не если у меня меньше. Например, если максимальное отображаемое число равно 10, но есть только 5 записей, я хочу, чтобы разделитель был после 4-й записи. Аналогично, если есть 20 результатов, но максимум равен 10, я хочу, чтобы это было после 9-го.

         <?php $subscriberIDs = ba_getUsersByRole( 'subscriber' );
        // Loop through each user
        $i=0;
        $max = 10; //max number of results
        $total_users =count($subscriberIDs); //total number of records
        foreach($subscriberIDs as $user) : 
        if($i<=$max) : ?>

        <li>   
                       <?echo $user['data'];?>
        </li>

        <?php 
        if(($i < $total_user-1 amp;amp; $max >= $total_users) || ($i < max-1 amp;amp;  $total_users <= $max)){echo "<hr>";}
    $i  ;

        endif; 
        endforeach; ?
  

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

1. Что с двоеточиями, это вообще допустимый PHP?

2. @Mark: Да, это так. Это способ использовать PHP без фигурных скобок. Он часто используется в шаблонах.

3. вы говорите о if и foreach ? Если да, то это допустимо: php.net/manual/en/control-structures.alternative-syntax.php

4. @icktoofay: Вау ..узнай что-то новое каждый день.

5. @Mark Это называется синтаксисом альтернативной структуры управления .

Ответ №1:

 // <hr> goes in every spot, but not on the last item, up to 10
$position = min($max-1, count($subscriberIDs)-1);
$i = 0;
foreach($subscriberIDs as $user){
   echo '<li>' . $user['data'] . '</li>';
   if($i != $position){
       echo '<hr>';
   }
   $i  ;
}
  

Для этого требуется меньшее из $max-1 или count($subscriberIDs)-1 , которое по определению будет последним элементом, который вы будете перебирать. Если у вас больше $max элементов, то это будет $max-1 , если у вас меньше $max элементов, то это будет count(.)-1 .

Затем, во время итерации, if оператор печатает <hr> до тех пор, пока текущий элемент не является последним элементом.

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

1. Мне нужна линейка для КАЖДОГО элемента, КРОМЕ последнего. Я думаю, что ваш код выполняет противоположное

2. @Bandon: хорошо, я неправильно понял, теперь после каждого элемента, кроме 9-го или предпоследнего элемента, ставится <hr>, это то, что вы хотите?

3. @Bandon: это было бы безопасно сделать.

4. @Bandon min возвращает наименьшее значение из приведенных аргументов.

5. Итак, по сути, вы говорите, получите наименьшее значение и убедитесь, что $position это не равно этому?