PHP получает каждый третий элемент списка

Я использовал этот код для переключения между классами для нечетных / четных элементов:

<li class="<?php echo ($key%2) ? "odd" : "even";>

Как я могу получить каждый 3-й предмет, чтобы добавить экс. классы "один", "два", "три"?

6 ответов

Решение

Это сложно в одной строке, но вы могли бы использовать переключатель:<?php switch($key%3): case 0: echo "one"; break; case 1: echo "two"; break; case 2: echo "three"; break; ?>

Чтобы очистить ваши HTML-файлы, вы можете поместить этот оператор switch в функцию.

Есть много способов. Вот такой "oneliner":

<li class="<?php $t=$key%3; echo ($t==0?"one":$t==1?"two":"three");>

Если вы получите более 3 элементов, вы можете получить более управляемый код с помощью оператора switch:

<?php

switch($key%4){
case(0): echo "one"; break;
case(1): echo "two"; break;
case(2): echo "three"; break;
case(3): echo "four"; break;
}

?>
$classes = ['one', 'two', 'three'];

for (..) {
    printf('<li class="%s">', $classes[$key % count($classes)]);
}

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

if ($i % 3 == 0) { }

Если вы хотите чистый HTML, определите функцию, как показано ниже:

Будет применяться default класс для каждого элемента, even класс для каждого второго элемента и third класс для каждого третьего элемента, вы можете расширить его, как вам нравится,

function apply_class($i)
{
    $every = 'default';
    $every_second = 'even';
    $every_third = 'third';

    $return [] = 'default';
    if ( $i%2 == 0 ) { $return [] = $every_second; }
    if ( $i%3 == 0 ) { $return [] = $every_third; }

    return implode(' ', $return);
}

Используйте это как,

<li class="<?php echo apply_class($i)?>" > </li>

Будет отображать HTML как,

$i

1   <li class="default"> </li>
2   <li class="default even"> </li>
3   <li class="default third"> </li>
4   <li class="default even"> </li>
5   <li class="default"> </li>
6   <li class="default even third"> </li>
7   <li class="default"> </li>
8   <li class="default even"> </li>
9   <li class="default third"> </li>
10  <li class="default even"> </li>
<?php
$classes = array('first','second','third');
for ($i = 1; $i < 100; $i++) {
    echo $i.' class: ' .current($classes);    
    if(!next($classes))
    {
        // reset if there is end of array
        reset($classes);
    }    
    echo '<br/>';
}

Эластичное решение. Вы можете иметь 3,4,5... классов, изменяя только массив $classes. Также это быстро, не нужно делить большие числа, просто перебрать небольшой массив с классом, указанным в правильном порядке

Другие вопросы по тегам