Foros del Web » Programando para Internet » PHP »

n primeros registros con simplexml

Estas en el tema de n primeros registros con simplexml en el foro de PHP en Foros del Web. Buenas. Llevo días rompiéndome el coco y no consigo ver la luz. Estoy integrando unas galerías de Google Picasa en una web mediante php y ...
  #1 (permalink)  
Antiguo 05/05/2009, 07:46
Avatar de Dr_T  
Fecha de Ingreso: junio-2004
Ubicación: Anglès, Catalunya
Mensajes: 20
Antigüedad: 19 años, 10 meses
Puntos: 0
Pregunta n primeros registros con simplexml

Buenas.

Llevo días rompiéndome el coco y no consigo ver la luz. Estoy integrando unas galerías de Google Picasa en una web mediante php y simplexml. Hasta aquí todo correcto, me lee los àlbums y de cada album me muestra las imágenes.

Pero además me gustaría que "en portada" se mostrasen las n últimas imágenes entradas... y es ahí donde estoy clavado. No se como definir el bucle "for" para leer solo los n primeros nodos del xml.

Todos los ejemplos que encuentro hacen un "foreach", que recorre toooodo el archivo, pero imagino que en mi caso solo debería haber un "for", correcto?

Tengo este ejemplo. Pongamos que devuelve 10 nodos, pero a mi solo me interesaría mostrar los 5 primeros:

Código:
<?php
$serviceurl = ruta_del_xml;
$results = simplexml_load_file($serviceurl);

foreach ($results->Result as $Result) {
print $Result->Title."<br>";
}
?>
Tendría que anidar un bucle for dentro del foreach? O en este caso no usaría el foreach?

Alguien tiene alguna idea de como hacer esto?

Me sacaréis de un buen apuro...

Un saludo!

Última edición por Dr_T; 05/05/2009 a las 08:14 Razón: Agrego código
  #2 (permalink)  
Antiguo 05/05/2009, 08:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: n primeros registros con simplexml

No, simplemente comprueba si el bucle va por la quinta vuelta y haces un break;:
Código php:
Ver original
  1. $i = 0;
  2. foreach( // cosas // ) {
  3.      if( $i == 5 ) break;
  4.      $i++;
  5. }

Saludos.
  #3 (permalink)  
Antiguo 05/05/2009, 08:33
Avatar de Dr_T  
Fecha de Ingreso: junio-2004
Ubicación: Anglès, Catalunya
Mensajes: 20
Antigüedad: 19 años, 10 meses
Puntos: 0
Muchas gracias por tu rápida respuesta, GatorV.

Funciona a la perfección! La verdad es que no se porque, siempre acabo descartando el uso del foreach...

Un saludo!

Y... rizando el rizo... si lo que quiero es leer los N últimos nodos de un xml?

Se me ocurre guardar tooooodo el xml en un array y luego leer los que me interesen. Hay algun método alternativo?

Un saludo!

Última edición por GatorV; 05/05/2009 a las 11:26
  #4 (permalink)  
Antiguo 05/05/2009, 11:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: n primeros registros con simplexml

Pues no, vas a tener que leer todo el XML en memoria, en un arreglo, y luego extraer los ultimos 5 elementos.

Saludos.
  #5 (permalink)  
Antiguo 06/05/2009, 05:03
Avatar de Dr_T  
Fecha de Ingreso: junio-2004
Ubicación: Anglès, Catalunya
Mensajes: 20
Antigüedad: 19 años, 10 meses
Puntos: 0
De acuerdo Respuesta: n primeros registros con simplexml

Bueno... después de pelearme intentando guardar el "foreach" en un array, he encontrado una solución alternativa.

La teoría es "Si $i es mayor o igual que $total menos $elementos_ a_mostrar, haz algo; sinó, no hagas nada." Es decir...

Código PHP:
$a_mostrar 5;
$i 1;

foreach (
$sxml->entry as $entry) {
  if( 
$i >= ($total-$a_mostrar) ){
  
// acciones
  
}
  
$i++;

El único "problema" es que no puedo mostrar el último resultado en primer lugar, pero bueno... es una solución rápida, y no genero un array enooooooorme (teniendo en cuenta que lo que se genera es un xml para todas las fotos de una cuenta de Picasa).

Muchas gracias a GatorV por abrir el camino.

Un saludo!

Edito:
Al final conseguí volcar todo el contenido del xml en un array bidimensional y luego le "dí la vuelta" con la funcion array_reverse. Igual de útil, aunque, obviamente, se demora un poco más que el método anterior.

Última edición por Dr_T; 06/05/2009 a las 05:46
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:06.