En un bucle foreach, ¿cómo identifico el último elemento del bucle?

28 jul 2011, 12:12:53
Vistas: 22.5K
Votos: 2

Tengo el siguiente código para hacer un bucle foreach, quiero identificar el último elemento del bucle (por ejemplo, si se recorren 3 eventos, quiero identificar el tercer evento) para hacer algo ligeramente diferente con el CSS. ¿Cómo podría hacerlo?

<?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>
        Ubicación: <?php echo $fields->location; ?><br />
        Inicio: <?php echo $fields->start_date; ?> a las <?php echo $fields->start_time; ?>
        <?php $fields = get_acf(); if($fields->end_date != "") : ?>
        , Fin: <?php echo $fields->end_date; ?> a las <?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="Leer más sobre: <?php echo $fields->event_title; ?>">Leer más...</a></p>
</div>
<?php } wp_reset_query(); ?>
0
Todas las respuestas a la pregunta 2
6

Puedes probar esto:

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

y:

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

Esto agregará una clase last a tu último div con clase event.

28 jul 2011 12:41:45
Comentarios

Gracias, curiosamente ha añadido la última clase al segundo elemento en lugar del tercero (es decir, al último elemento).

Rob Rob
28 jul 2011 12:45:55

Ah sí, eso es porque $key comienza en cero, no en uno. He corregido el código. Dime si funciona ahora.

mike23 mike23
28 jul 2011 13:02:30

debería ser if( $key == (count( $pages ) -1) ) ya que el primer índice del array es 0 mientras que la función count comienza desde 1.

Bainternet Bainternet
28 jul 2011 13:03:10

@Bainternet ¡Gracias! Sabía qué hacer pero no conseguía la sintaxis correcta.

Rob Rob
28 jul 2011 13:05:23

@Bainternet Está comportándose un poco raro. Usando -1 como contador, hace que el primer elemento sea el "último". Cuando lo cambio a +1, no funciona cuando solo hay dos elementos en la lista pero sí funciona cuando hay 3, ¡argh!

Rob Rob
28 jul 2011 15:51:15

@mike23 Mira el comentario de arriba para ver el problema.

Rob Rob
28 jul 2011 18:23:29
Mostrar los 1 comentarios restantes
1

Dado que $pages es un arreglo, obtén su conteo con $pages_count = count( $pages ); y luego dentro del bucle, mantén un contador que se incremente en cada iteración del bucle y compara si es igual al conteo if ( $pages_count == $counter++ )

28 jul 2011 12:27:18
Comentarios

Gracias, no estoy del todo seguro de cómo implementar eso. Los elementos son ilimitados, así que no necesariamente es el tercer elemento, sino el último elemento.

Rob Rob
28 jul 2011 12:35:58