#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.php4. @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
это не равно этому?