2012-04-23 4 views
-1

У меня есть простой цикл Еогеасп как:цикл PHP Еогеасп каждый пятый элемент

foreach ($posts as $index => $posts) 

, а также счетчик:

if($index % 5 + 1 == 5) { 
//do something 
} 

У меня есть 15 сообщений на странице, и он должен сделать что-то каждый пятый пункт но НЕ на последнем, но как это сделать?

Таким образом, становится:

POST 
POST 
POST 
POST 
POST 
DO SOMETHING 
POST 
POST 
POST 
POST 
POST 
DO SOMETHING 
POST 
POST 
POST 
POST 
POST 
+0

Я предполагаю, что вы знаете максимальный индекс, затем измените условие на что-то вроде ($ index% 5 + 1 == 5) && ($ index mert

+0

См. «FizzBuzz»? Это то же самое * (на самом деле это менее сложно) ... вам просто нужно знать условное значение для «последнего», которое уже было рассмотрено в другом месте, и объединить его. –

ответ

3

Если вы знаете, у вас есть 15 сообщений, и нужно каждый 5-й, но не последний ... Это означает, что вам нужно «сделать что-то» с 5-й и 10-й один, я прав? Так почему бы не проверить это?

if($index == 4 || $index == 9) 
+0

Точно так, это гораздо читательнее, чем '$ index% 5 + 1 == 5 && $ index! = 15', специальные случаи должны быть особенными. – OmnipotentEntity

+0

Это работает, но мне пришлось использовать 4 и 9? Хотя у меня есть 15 предметов ... – Cameron

+0

Это потому, что вы начинаете свой $ index в 0 – Jack

4
if($index % 5 + 1 == 5 && $index != 14) { 
//do something 
} 

Измените ваш условный, так что $ индекс не равен последний индекс в массиве. Это 14 или 15 (в зависимости от того, начинаете ли вы с 0 или 1).

+0

Все еще делает что-то после 15-го предмета! – Cameron

+0

Создает ли ваш '$ index' значение 0 или 1? Измените его на '$ index! = 14', если $ index начинается с 0 – Jack

+0

Проверьте, превышает ли индекс больше ... – citruspi

0

Проверьте диапазон оператора .. очень полезно для такого рода ситуации.

http://php.net/manual/en/function.range.php 

foreach (range(0, $index, 5) as $number) { 
    // do something with $posts[$number] 
} 
+0

Как это будет использоваться/полезно здесь? –

+0

В качестве примера добавлен немного кода. – FreudianSlip

0

Если вам не нужны ассоциативные массивы:

$posts=array(a,b,a,b,a,b,a,b,a,b,a,b,a,b,a); 

for($i=0;$i<count($posts);$i++) 
{ 
if($i % 5 + 1 == 5 && $i != count($posts) - 1) 
{ 
echo $i." as ".$posts[$i]; 
} 
} 

Это удалит весь отбой, и только эхо каждый пятого поста.

Смежные вопросы