Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: frauzamb en 13 Mayo 2014, 15:50 pm



Título: Meter en un array la salida de una consulta de varios documentos con Foreach.
Publicado por: frauzamb en 13 Mayo 2014, 15:50 pm
Hola, tengo una duda con PHP, muchas gracias con antelación.

Tengo varios documentos XML con datos de CDs de música, en los cuales necesito sacar el mismo dato de cada uno (Nombres de las canciones). El código me funciona para hacer esto, pero ahora necesito que cada 10 canciónes me lo meta en un <div>(para css) diferente. Lo que me pasa es que el foreach me hace un array por cada fichero que lee(un array por cd) y no uno de todos(uno con todas las canciones de todos los cds) y así poder contar el número de canciones y separarlas cada 10. ¿Alguna sugerencía?
Espero haberme explicado bien :S

Código
  1. //Listado de ficheros
  2. foreach(glob($url .'*.xml') as $archives) {
  3.  
  4. //Abrimos fichero xml
  5. $cdarchive=simplexml_load_file($archives);
  6.  
  7.        //Mostramos nombre de las canciones
  8. foreach ($cdarchive->songs->song as $cdsong){
  9. echo $count;
  10. echo "<div class='slide><div class'left>";
  11. echo $cdsong->title." ";
  12. if (isset($cdsong->length))
  13. echo "(".$cdsong->length.")";
  14. if (isset($cdsong->feat))
  15. echo "[feat.".$cdsong->feat."]";
  16. echo "</br>";
  17. echo "</div></div>";
  18. }

Mod: Temas PHP en subforo de PHP. Obligatorio utilziar etiquetas GeSHi.


Título: Re: Meter en un array la salida de una consulta de varios documentos con Foreach.
Publicado por: DanB en 13 Mayo 2014, 20:02 pm
Amigo intenta para la proxima poner el codigo entre las etiquetas adecuadas para que se vea correctamente. Te dejo un codigo que hice a modo de ejemplo.
Código
  1. /*desde una url*/
  2. $context  = stream_context_create(array('http' => array('header' => 'Accept: application/xml')));
  3. $xml = file_get_contents($url, false, $context);
  4. $xml = simplexml_load_string($xml);
  5. $sql="INSERT INTO Noticias (Titulo, link, Contenido) VALUES (:titulo , :link , :contenido)";
  6. $consulta = $conexion->prepare($sql);
  7. /* Establezco los parametros */
  8. $consulta->bindParam(':titulo',$titulo);
  9. $consulta->bindParam(':link',$link);
  10. $consulta->bindParam(':contenido',$contenido);
  11. foreach($xml->item as $noticia){
  12. /* Para cada elemento item del XML extraigo los elementos hijos, luego saco la informacion a traves de los nodos del documento XML y aplico addslashes para sanizar el texto para evitar \' y \" ya que la consulta SQL fallaria */
  13. $titulo = addslashes($noticia->title);
  14. $link = addslashes($noticia->link);
  15. $contenido = addslashes($noticia->description);
  16. /* Ejecuto la consulta */
  17. $consulta->execute();
  18. echo "Insertada NOTICIA a la BD <br/>";
  19. }
  20.  
  21.  
Si me publicas la estructura DOM del archivo XML puedo intentar modificarlo a tu ejemplo