Как определить последний элемент в цикле foreach?

28 июл. 2011 г., 12:12:53
Просмотры: 22.5K
Голосов: 2

У меня есть следующий код с циклом foreach, я хочу определить последний элемент в цикле (например, если цикл проходит через 3 события, я хочу определить 3-е событие), чтобы применить к нему другие CSS стили. Как это сделать?

<?php $pages = get_pages(array('child_of' => $post->ID, 'sort_column' => 'menu_order'));
    foreach($pages as $post)
    {
    setup_postdata($post);
    $fields = get_fields();
?>
<div class="event">
    <img class="event-thumbimage" src="<?php echo $fields->thumb_image; ?>" height="120" width="140" alt="<?php echo $fields->event_title; ?>" />
    <h2><?php echo $fields->event_title; ?></h2>
    <p>
        Место проведения: <?php echo $fields->location; ?><br />
        Начало: <?php echo $fields->start_date; ?> в <?php echo $fields->start_time; ?>
        <?php $fields = get_acf(); if($fields->end_date != "") : ?>
        , Окончание: <?php echo $fields->end_date; ?> в <?php echo $fields->end_time; ?>
        <?php else : ?>
        <?php endif; ?>
    </p>                        
    <p style="margin-bottom:0px!IMPORTANT;"><?php echo substr($fields->description,0,170) . "..."; ?></p>
    <p><a class="read-more" href="<?php echo get_page_link($post->ID); ?>" title="Подробнее о: <?php echo $fields->event_title; ?>">Подробнее...</a></p>
</div>
<?php } wp_reset_query(); ?>
0
Все ответы на вопрос 2
6

Вы можете попробовать так:

foreach( $pages as $key => $post )

и:

<div class = "event <?php if( $key == ( count( $pages ) - 1 ) ) echo 'last'; ?>" >

Это добавит класс last к вашему последнему блоку event.

28 июл. 2011 г. 12:41:45
Комментарии

Спасибо, странно, но последний класс добавился ко второму элементу, а не к третьему (т.е. последнему).

Rob Rob
28 июл. 2011 г. 12:45:55

Ах да, это потому что $key начинается с нуля, а не с единицы. Я исправил код. Скажи, если теперь работает.

mike23 mike23
28 июл. 2011 г. 13:02:30

должно быть if( $key == (count( $pages ) -1) ), потому что первый индекс массива 0, а функция count считает с 1.

Bainternet Bainternet
28 июл. 2011 г. 13:03:10

@Bainternet Спасибо, знал, что нужно делать, но не мог правильно подобрать синтаксис!

Rob Rob
28 июл. 2011 г. 13:05:23

@Bainternet Работает немного странно. При использовании -1 в качестве счетчика первый элемент становится "последним". При изменении на +1 не работает, если в списке только два элемента, но работает, когда их 3, ааа!!

Rob Rob
28 июл. 2011 г. 15:51:15

@mike23 Смотри комментарий выше по проблеме.

Rob Rob
28 июл. 2011 г. 18:23:29
Показать остальные 1 комментариев
1

Поскольку $pages является массивом, получите его количество с помощью $pages_count = count( $pages );, а затем внутри цикла используйте счетчик, который увеличивается на каждой итерации, и сравнивайте его с общим количеством элементов: if ( $pages_count == $counter++ )

28 июл. 2011 г. 12:27:18
Комментарии

Спасибо, не совсем уверен, как это реализовать. Элементов может быть неограниченное количество, так что это не обязательно третий элемент, а просто последний.

Rob Rob
28 июл. 2011 г. 12:35:58