In un ciclo foreach, come posso individuare l'ultimo elemento del ciclo?

28 lug 2011, 12:12:53
Visualizzazioni: 22.5K
Voti: 2

Ho il seguente codice per eseguire un ciclo foreach, voglio individuare l'ultimo elemento nel ciclo (ad esempio se il ciclo passa attraverso 3 eventi, voglio individuare il terzo evento) per applicare uno stile CSS leggermente diverso. Come posso farlo?

<?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>
        Località: <?php echo $fields->location; ?><br />
        Inizio: <?php echo $fields->start_date; ?> alle <?php echo $fields->start_time; ?>
        <?php $fields = get_acf(); if($fields->end_date != "") : ?>
        , Fine: <?php echo $fields->end_date; ?> alle <?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="Leggi di più su: <?php echo $fields->event_title; ?>">Leggi di più...</a></p>
</div>
<?php } wp_reset_query(); ?>
0
Tutte le risposte alla domanda 2
6

Puoi provare questo:

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

e:

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

Aggiungerà una classe last al tuo ultimo div con classe event.

28 lug 2011 12:41:45
Commenti

Grazie, stranamente ha aggiunto l'ultima classe al secondo elemento invece che al terzo (cioè l'ultimo elemento).

Rob Rob
28 lug 2011 12:45:55

Ah sì, è perché $key parte da zero, non da uno. Ho corretto il codice. Dimmi se ora funziona.

mike23 mike23
28 lug 2011 13:02:30

dovrebbe essere if( $key == (count( $pages ) -1) ) visto che il primo indice dell'array è 0 mentre la funzione count parte da 1.

Bainternet Bainternet
28 lug 2011 13:03:10

@Bainternet Grazie, sapevo cosa fare ma non riuscivo a far funzionare la sintassi correttamente!

Rob Rob
28 lug 2011 13:05:23

@Bainternet Si comporta in modo un po' strano. Usando -1 come conteggio rende il primo elemento "ultimo". Quando lo cambio a +1, non funziona quando ci sono solo due elementi nella lista ma funziona quando ce ne sono 3, argh!!

Rob Rob
28 lug 2011 15:51:15

@mike23 Vedi il commento sopra per il problema.

Rob Rob
28 lug 2011 18:23:29
Mostra i restanti 1 commenti
1

Dato che $pages è un array, ottieni il suo conteggio con $pages_count = count( $pages ); e poi all'interno del ciclo, mantieni un contatore che viene incrementato ad ogni iterazione del ciclo e confronta se è uguale al conteggio if ( $pages_count == $counter++ )

28 lug 2011 12:27:18
Commenti

Grazie, non sono del tutto sicuro di come implementarlo. Gli elementi sono illimitati, quindi non è necessariamente il terzo elemento, ma semplicemente l'ultimo.

Rob Rob
28 lug 2011 12:35:58