2012-04-10 2 views
1

У меня есть массив PHP элементов (сообщения WordPress), которые я прокручиваю для создания сетки 3х3.
Использование JQuery, я применить класс CSS к элементам среднего столбца, как так:
$('#grid li:nth-child(3n+2)').addClass('middle');PHP-эквивалент nth-child

Как я могу добиться этого в PHP? Можно ли установить счетчик, который будет соответствовать 2,5,8,11, etc...?

+2

Как насчет '($ i% 3) - 2 == 0'? – hakre

ответ

1

Знаете ли вы о циклах в PHP? Не зная больше о чем именно вы пытаетесь достичь в вашем PHP коде, я могу только предположить, что-то вроде этого:

$posts = array(); //The whatever thing that contains the posts you are concerned about 
for ($i = 1; $i<=count($posts); $i++) { 
    if($i == /*selector condition*/) { 
     //do what you do with the targeted posts 
    } else { 
     //do what you do with all others 
    } 
} 

(См http://www.w3schools.com/php/php_looping_for.asp)

Маленькая ремарка: Вы, как правило, начинают отсчет с $ i = 0, но я предполагаю, что если вы говорите о сообщениях, они, вероятно, начнут считать с 1, а не 0.

+0

'$ posts' (WP_Query) не реализует интерфейс' countable', см. Http://core.trac.wordpress.org/ticket/20296 – hakre

0

$ my_query = new WP_Query ('category_name = special_cat & posts_per_page = 10'); ?>

$query = new WP_Query('...'); 
$posts = ($count = $query->post_count) ? range(1, $count) : array(); 
foreach (array_chunk($posts, 3) as $row => $rowIndexes) 
{ 
    foreach ($rowIndexes as $column => $index) 
    { 
     $query->the_post(); 
     $middle = $column === 1; 
     ... 
    } 
} 
0

:nth-child(3n+2) будет:

$count = count($arr); 
for($i = 0, $idx = 0; $idx < $count - 1; $idx = 3 * $i + 2, $i++) { 
    print_r($arr[$idx]); 
} 

Конечно это только даст вам эти конкретные пункты. Если вы хотите все элементы и только запустите блок кода на этих элементах, то я еще не знаю .....

0
function nthChild($multiplier, $addition, $max) 
{ 
    $validInedexes = array(); 

    for ($n = 0; $n < $max; $n++) 
    { 
     $idx = $multiplier * $n + $addition; 
     if ($idx > $max) 
     { 
      return $validInedexes; 
     } 
     $validInedexes[] = ($idx - 1); 
    } 
} 

Вышеуказанная функция даст вам действующие индексы на основе ввода. Затем в любом цикле по индексу. используйте функцию in_array для этого или что угодно.

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