Foros del Web » Programando para Internet » PHP »

¿como ejecutar un foreach condicionado para 2 xml?

Estas en el tema de ¿como ejecutar un foreach condicionado para 2 xml? en el foro de PHP en Foros del Web. Buen dia, sucede que necesito ejecutar un foreach condicionado de dos xml a la vez, no pongo mi funcion php ni mis xml porque son ...
  #1 (permalink)  
Antiguo 19/04/2012, 14:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 66
Antigüedad: 13 años, 7 meses
Puntos: 2
¿como ejecutar un foreach condicionado para 2 xml?

Buen dia, sucede que necesito ejecutar un foreach condicionado de dos xml a la vez, no pongo mi funcion php ni mis xml porque son muy largos, para un ejemplo seria algo asi:

Tengo dos XML

Código:
<?xml version="1.0" encoding="ISO-8859-1"?>  
<mensajes>  

    <mensaje>  
           <suma>1+1</suma>  
    </mensaje> 

    <mensaje>  
           <suma>2+2</suma>  
    </mensaje>

    <mensaje>  
           <suma>3+3</suma>  
    </mensaje>

</mensajes>
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>  
<campos>  

    <campo>  
           <resultado>2</resultado>  
    </campo> 

    <campo>  
           <resultado>3</resultado>  
    </campo>

    <campo>  
           <resultado>6</resultado>  
    </campo>

</campos>
Y solicito un foreach por medio de php de la siguiente manera:

Código PHP:
<?PHP

$xml 
simplexml_load_file("library.xml");

$res $xml->xpath("/campos/campo");

foreach (
$res as $art){

echo 
$art->resultado;}

?>
Y por ende me muestra 2 3 6, pero ahora lo que necesito es condicionar esos resultados, solo cuando suma sea igual a resultado, he tratado lo siguiente:

Código PHP:
<?PHP

$xml2 
simplexml_load_file("library2.xml");

$xml simplexml_load_file("library.xml");


$res2 $xml->xpath("/mensajes/mensaje");

foreach (
$res2 as $art2){

$suma $art2->suma;


$res $xml->xpath("/campos/campo[resultado='$suma']");

foreach (
$res as $art){

echo 
$art->resultado;}

}

?>
Pero no muestra nada, la idea seria que mostrara solo 2 y 6, ya que son los únicos que cumplirían con la condición. Unir los xml me resulta imposible ya que uno de esos es de un API externa a mi web, la otra seria hacer solo un foreach para ambos xml y asi evito hacer tantas peticiones, pero no sabría como hacerlo.

Muchas gracias.
  #2 (permalink)  
Antiguo 19/04/2012, 15:14
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: ¿como ejecutar un foreach condicionado para 2 xml?

Fijate que aca http://php.net/manual/es/book.simplexml.php mas abajo hay una funcion que transforma el elemento del xml en un array, seguramente te serviria tratarlo como un vector asi, si contienen la misma cantidad de elementos lo podes trabajar a los 2 en la iteracion de 1 solo de ellos.
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 19/04/2012, 15:14
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: ¿como ejecutar un foreach condicionado para 2 xml?

Por ahora se me ocurre algo así pero la idea de linuxzero es buena y tal vez pueda llevarte a algo mejor

Código PHP:
Ver original
  1. <?php
  2. $sxe1 = new SimpleXMLElement($xml1);
  3. $sxe2 = new SimpleXMLElement($xml2);
  4.  
  5. foreach ($sxe1 as $s1) {
  6.     $r = explode('+', $s1->suma);
  7.     $sum = array_sum($r);
  8.     foreach ($sxe2 as $s2) {
  9.         if ($sum == $s2->resultado) {
  10.             echo $s2->resultado . '<br />';
  11.         }
  12.     }
  13. }
  14.  
  15. //2
  16. //6

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #4 (permalink)  
Antiguo 19/04/2012, 19:06
 
Fecha de Ingreso: septiembre-2010
Mensajes: 66
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: ¿como ejecutar un foreach condicionado para 2 xml?

Gracias a ambos por sus comentarios, andresdzphp me sirvió de maravilla, era justo lo que estaba buscado, pero ahora me nacio una nueva duda, ¿como cuento el numero de resultados?, yo antes lo que hacia era:

Código PHP:
<?PHP 

$xml 
simplexml_load_file("library.xml"); 

$res $xml->xpath("/campos/campo"); 

echo 
$count count($res);

?>
Pero con dos foreach, uno de ellos condicionado y dos XML no sabría como hacerlo.

Muchas gracias.

Última edición por nilotrajano; 19/04/2012 a las 19:27
  #5 (permalink)  
Antiguo 19/04/2012, 19:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 66
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: ¿como ejecutar un foreach condicionado para 2 xml?

Ya pude, lo dejo por si alguien lo necesita en algun momento, este codigo muestra el numero de resultados:

Código PHP:
<?php
$sxe1 
simplexml_load_file("http://videoya.herobo.com/anime/1.xml");
$sxe2 simplexml_load_file("http://videoya.herobo.com/anime/2.xml");

$i 0

foreach (
$sxe1 as $s1) {
    
$r explode('+'$s1->suma);
    
$sum array_sum($r);
    foreach (
$sxe2 as $s2) {
        if (
$sum == $s2->resultado) {
            echo 
$s2->resultado '<br />'$i++;
        }
    }
}

echo 
$i;

 
?>

De verdad muchas gracias.
  #6 (permalink)  
Antiguo 19/04/2012, 20:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 66
Antigüedad: 13 años, 7 meses
Puntos: 2
¿como mostrar el numero de resultados en un comienzo??

Buen dia, sucede que en el siguiente codigo se muestra el numero de resultados de dos foreach en la variable $i

Código PHP:
<?php 
$sxe1 
simplexml_load_file("http://videoya.herobo.com/anime/1.xml"); 
$sxe2 simplexml_load_file("http://videoya.herobo.com/anime/2.xml"); 

$i 0;  

foreach (
$sxe1 as $s1) { 
    
$r explode('+'$s1->suma); 
    
$sum array_sum($r); 
    foreach (
$sxe2 as $s2) { 
        if (
$sum == $s2->resultado) { 
            echo 
$s2->resultado '<br />'$i++; 
        } 
    } 


echo 
$i

 
?>
Pero como pueden observar, para mostrar el numero de resultados hay que recorrer todo el foreach, me gustaria saber como mostrar el numero de resultados $i, al comienzo de la pagina.

Muchas gracias.

Etiquetas: api, condicionado, foreach, xml
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 18:05.