Foros del Web » Programando para Internet » PHP »

Recorrer array

Estas en el tema de Recorrer array en el foro de PHP en Foros del Web. Hola, Despues de llamar a un web service obtengo esto haciendo un var_dump Cita: array(1) { ["Result"]=> string(2364) " 12345 BARCELONA Bar1 54321 Girona Gir1"} ...
  #1 (permalink)  
Antiguo 06/03/2012, 06:14
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Recorrer array

Hola,

Despues de llamar a un web service obtengo esto haciendo un var_dump

Cita:
array(1) { ["Result"]=> string(2364) " 12345
BARCELONA
Bar1 54321
Girona
Gir1"}
Si miro el codigo fyuente tengo esto
Cita:
[Result]array(1) {
["GetSitesResult"]=>
string(2364) "<DocumentElement>
<Row>
<ID>12345</ID>
<Prov>BARCELONA</Prov>
<Nombre>Bar1</Nombre>
</Row>
<Row>
<ID>54321</ID>
<Prov>Girona</Prov>
<Nombre>Gir1</Nombre>
</Row></DocumentElement>"
}
Alguna idea como recorrer esto por etiquetas???


Gracias

Saludos
__________________
La ficción es y será mi única realidad

Última edición por jspcat; 06/03/2012 a las 06:15 Razón: Codifgo mas claro
  #2 (permalink)  
Antiguo 06/03/2012, 06:25
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

Para los array mejor un print_r
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 06/03/2012, 06:31
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

Exactamente el mismo resultado con un print_r
__________________
La ficción es y será mi única realidad
  #4 (permalink)  
Antiguo 06/03/2012, 06:36
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

parece que tienes XML dentro de un array menuda jartada.

Código PHP:
Ver original
  1. $dom = new DomDocument('1.0','utf-8');
  2. $dom->loadXML($array[0]);
  3. echo $dom->saveXML();

vamos poco a poca a ver
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #5 (permalink)  
Antiguo 06/03/2012, 06:43
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

Hola

Gracias por la ayuda.

He probado lo que me has dicho pero me da un error

Cita:
Warning: DOMDocument::loadXML() [domdocument.loadxml]: Input is not proper UTF-8, indicate encoding ! Bytes: 0xD1 0x41 0x3C 0x2F in Entity,
Alguna idea?
__________________
La ficción es y será mi única realidad
  #6 (permalink)  
Antiguo 06/03/2012, 06:46
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

tienes que conseguir cargar el XML, no se si lo tienes en: $array['GetSitesResul'];

pegame el resultado del codigo fuente del prin_r
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #7 (permalink)  
Antiguo 06/03/2012, 06:53
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

El resultado de print_r($result["GetSitesResult"]); es

Cita:
<DocumentElement>
<Row>
<ID>12345</ID>
<Prov>BARCELONA</Prov>
<Nombre>Bar1</Nombre>
</Row>
<Row>
<ID>54321</ID>
<Prov>Girona</Prov>
<Nombre>Gir1</Nombre>
</Row></DocumentElement>
__________________
La ficción es y será mi única realidad
  #8 (permalink)  
Antiguo 06/03/2012, 06:55
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

Código PHP:
Ver original
  1. $dom = new DomDocument('1.0','utf-8');
  2.     $dom->loadXML($result["GetSitesResult"]);
  3.     echo $dom->saveXML();

a ver si hace bien esto, tendria que mostrar el propio XML
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #9 (permalink)  
Antiguo 06/03/2012, 07:01
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

Me devuelve por pantalla esto

Cita:
Warning: DOMDocument::loadXML() [domdocument.loadxml]: Input is not proper UTF-8, indicate encoding !
Que se soluciona haciendo

Código PHP:
$dom = new DomDocument('1.0','utf-8');
    
$dom->loadXML(utf8_encode($result["GetSitesResult"]));
    echo 
$dom->saveXML(); 
Entocnes no sale ningun error por pantalla.

Y veo por pantalla

Cita:
12345
BARCELONA
Bar1 54321
Girona
Gir1
Y si pongo a ver el codigo fuente veo

[QUOTE]
<?xml version="1.0"?>
<DocumentElement>
<Row>
<ID>12345</ID>
<Prov>BARCELONA</Prov>
<Nombre>Bar1</Nombre>
</Row>
<Row>
<ID>54321</ID>
<Prov>Girona</Prov>
<Nombre>Gir1</Nombre>
</Row></DocumentElement>[QUOTE]

es correcto esto no? Como lo puedo recorrer ahora?
__________________
La ficción es y será mi única realidad
  #10 (permalink)  
Antiguo 06/03/2012, 07:02
 
Fecha de Ingreso: febrero-2012
Ubicación: En mi propio mundo
Mensajes: 73
Antigüedad: 12 años, 2 meses
Puntos: 23
Respuesta: Recorrer array

en vez de $dom->loadXML($array[0]);
pon

$dom->loadXML($nombre_array["Result"]);

o

$dom->loadXML($nombre_array[""GetSitesResult""]);
  #11 (permalink)  
Antiguo 06/03/2012, 07:07
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

Ya esta puesto, el array se llama $result, pero sin el ut8_encode no funciona
__________________
La ficción es y será mi única realidad

Última edición por jspcat; 06/03/2012 a las 07:07 Razón: Mas info
  #12 (permalink)  
Antiguo 06/03/2012, 07:13
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

el tema es el siguiente paso, es decir como lo recorro ahora este $dom??
__________________
La ficción es y será mi única realidad
  #13 (permalink)  
Antiguo 06/03/2012, 07:15
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

Código PHP:
Ver original
  1. $DocumentElement = $dom->getElementsByTagName('DocumentElement')->item(0);
  2. $Row = $DocumentElement->getElementsByTagName('Row');
  3.  
  4. $result = array();
  5. $i = 0;
  6. // recorremos todos los nodos ROW
  7. foreach($Row as $r)
  8. {
  9.     $result[$i] = array();
  10.     // recorremos todos los hijos de cada ROW
  11.     foreach($r->childNodes as $c)
  12.     {
  13.         if($c->nodeType==1)
  14.         {          
  15.             // como KEY del array ponemos el nombre del NODO y como valor el NODEVALUE
  16.             $result[$i][$c->nodeName] = $c->nodeValue;         
  17.         }
  18.     }
  19.     $i++;
  20. }
  21.  
  22. echo "<pre>";
  23. print_r($result);
  24. echo "</pre>";
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #14 (permalink)  
Antiguo 06/03/2012, 07:24
 
Fecha de Ingreso: febrero-2012
Ubicación: En mi propio mundo
Mensajes: 73
Antigüedad: 12 años, 2 meses
Puntos: 23
Respuesta: Recorrer array

Es raro pq he hecho un aprueba local y si me funciona sin el ut8_encode
este es el ejemplo de prueba que he hecho

Código PHP:
<?php
$a 
= array("Result"=>"<DocumentElement>
<Row>
<ID>12345</ID>
<Prov>BARCELONA</Prov>
<Nombre>Bar1</Nombre>
</Row>
<Row>
<ID>54321</ID>
<Prov>Girona</Prov>
<Nombre>Gir1</Nombre>
</Row></DocumentElement>"
);
var_dump($a);
$dom = new DomDocument('1.0','utf-8');
$dom->loadXML($a["Result"]);
echo 
"<br><br>".$dom->saveXML();

   
?>
Y me ha devuelto

array(1) { ["Result"]=> string(178) " 12345 BARCELONA Bar1 54321 Girona Gir1 " }

12345 BARCELONA Bar1 54321 Girona Gir1
  #15 (permalink)  
Antiguo 06/03/2012, 07:26
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

te recomiendo que siempre trabajes con utf-8 asi no tendras problemas de ese tipo ;) mirate un post más arriba tienes como recorrer el DOM y meterlo en un array
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #16 (permalink)  
Antiguo 06/03/2012, 07:41
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

Poniendo junto todo lo comentado me queda esto:


Código PHP:
$dom = new DomDocument('1.0','utf-8');
$dom->loadXML(utf8_encode($result["GetSitesResult"]));
$dom=$dom->saveXML();

$DocumentElement $dom->getElementsByTagName('DocumentElement')->item(0);
$Row $DocumentElement->getElementsByTagName('Row');
 
$result = array();
$i 0;
// recorremos todos los nodos ROW
foreach($Row as $r)
{
    
$result[$i] = array();
    
// recorremos todos los hijos de cada ROW
    
foreach($r->childNodes as $c)
    {
        if(
$c->nodeType==1)
        {           
            
// como KEY del array ponemos el nombre del NODO y como valor el NODEVALUE
            
$result[$i][$c->nodeName] = $c->nodeValue;          
        }
    }
    
$i++;
}
 
echo 
"<pre>";
print_r($result);
echo 
"</pre>"
Ves algun error aqui?Porque me devuelve

Cita:
Fatal error: Call to a member function getElementsByTagName() on a non-objec
__________________
La ficción es y será mi única realidad
  #17 (permalink)  
Antiguo 06/03/2012, 07:43
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

quita el:

$dom=$dom->saveXML();

ya que lo estas conviertiendo otra vez a texto, eso lo hemos puesto antes para verificar que cargaba correctamente el XML en la variable ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #18 (permalink)  
Antiguo 06/03/2012, 07:45
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

Me devuelve

Cita:
Array
(
)
El codigo fuente es

Cita:
<pre>Array
(
)
</pre>
__________________
La ficción es y será mi única realidad
  #19 (permalink)  
Antiguo 06/03/2012, 07:48
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

este es el código que tengo yo:
Código PHP:
Ver original
  1. <?php
  2. $a = "<DocumentElement>
  3. <Row>
  4. <ID>12345</ID>
  5. <Prov>BARCELONA</Prov>
  6. <Nombre>Bar1</Nombre>
  7. </Row>
  8. <Row>
  9. <ID>54321</ID>
  10. <Prov>Girona</Prov>
  11. <Nombre>Gir1</Nombre>
  12. </Row></DocumentElement>";
  13.  
  14. $dom = new DomDocument('1.0','utf-8');
  15. $dom->loadXML($a);
  16.  
  17. $DocumentElement = $dom->getElementsByTagName('DocumentElement')->item(0);
  18. $Row = $DocumentElement->getElementsByTagName('Row');
  19.  
  20. $result = array();
  21. $i = 0;
  22. // recorremos todos los nodos ROW
  23. foreach($Row as $r)
  24. {
  25.     $result[$i] = array();
  26.     // recorremos todos los hijos de cada ROW
  27.     foreach($r->childNodes as $c)
  28.     {
  29.         if($c->nodeType==1)
  30.         {          
  31.             // como KEY del array ponemos el nombre del NODO y como valor el NODEVALUE
  32.             $result[$i][$c->nodeName] = $c->nodeValue;          
  33.         }
  34.     }
  35.     $i++;
  36. }
  37.  
  38. echo "<pre>";
  39. print_r($result);
  40. echo "</pre>";  
  41. ?>

me devuelve:
Código HTML:
Ver original
  1. <pre>Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [ID] => 12345
  6.             [Prov] => BARCELONA
  7.             [Nombre] => Bar1
  8.         )
  9.  
  10.     [1] => Array
  11.         (
  12.             [ID] => 54321
  13.             [Prov] => Girona
  14.             [Nombre] => Gir1
  15.         )
  16.  
  17. )
  18. </pre>
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #20 (permalink)  
Antiguo 06/03/2012, 08:03
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

Tienes toda la razon a mi igual, el problema ha sido con mas resultados. Que cuenado se encuentra una Ñ peta, aunque es raro porque esta ut8_encode
__________________
La ficción es y será mi única realidad
  #21 (permalink)  
Antiguo 06/03/2012, 08:07
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

quitale el utf-8 del domdocument
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #22 (permalink)  
Antiguo 06/03/2012, 08:15
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

Al final asi

Código PHP:
$dom = new DomDocument('1.0','utf-8');
$res=utf8_encode($result["GetSitesResult"]);
$dom->loadXML($res);
 
$DocumentElement $dom->getElementsByTagName('DocumentElement')->item(0);
$Row $DocumentElement->getElementsByTagName('DeviceRow');
 
$result = array();
$i 0;
// recorremos todos los nodos ROW
foreach($Row as $r)
{
    
$result[$i] = array();
    
// recorremos todos los hijos de cada ROW
    
foreach($r->childNodes as $c)
    {
        if(
$c->nodeType==1)
        {           
            
// como KEY del array ponemos el nombre del NODO y como valor el NODEVALUE
            
$result[$i][$c->nodeName] = $c->nodeValue;          
        }
    }
    
$i++;
}
 
echo 
"<pre>";
print_r($result);
echo 
"</pre>"
Lo hace correcto asi que ya esta

Muchisimas gracias por tu ayuda!!!!!
__________________
La ficción es y será mi única realidad
  #23 (permalink)  
Antiguo 06/03/2012, 08:17
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

Código PHP:
Ver original
  1. <?php
  2. $a = "<DocumentElement>
  3. <Row>
  4. <ID>12345</ID>
  5. <Prov>Barcelona Ññ</Prov>
  6. <Nombre>Bar1</Nombre>
  7. </Row>
  8. <Row>
  9. <ID>54321</ID>
  10. <Prov>Girona áéíó</Prov>
  11. <Nombre>Gir1</Nombre>
  12. </Row></DocumentElement>";
  13.  
  14. $dom = new DomDocument('1.0','utf-8');
  15. $dom->loadXML($a);
  16.  
  17. $DocumentElement = $dom->getElementsByTagName('DocumentElement')->item(0);
  18. $Row = $DocumentElement->getElementsByTagName('Row');
  19.  
  20. $result = array();
  21. $i = 0;
  22. // recorremos todos los nodos ROW
  23. foreach($Row as $r)
  24. {
  25.     $result[$i] = array();
  26.     // recorremos todos los hijos de cada ROW
  27.     foreach($r->childNodes as $c)
  28.     {
  29.         if($c->nodeType==1)
  30.         {          
  31.             // como KEY del array ponemos el nombre del NODO y como valor el NODEVALUE
  32.             $result[$i][$c->nodeName] = $c->nodeValue;          
  33.         }
  34.     }
  35.     $i++;
  36. }
  37.  
  38. echo "<pre>";
  39. print_r($result);
  40. echo "</pre>";  
  41. ?>

resultado:
Código HTML:
Ver original
  1. <pre>Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [ID] => 12345
  6.             [Prov] => Barcelona Ññ
  7.             [Nombre] => Bar1
  8.         )
  9.  
  10.     [1] => Array
  11.         (
  12.             [ID] => 54321
  13.             [Prov] => Girona áéíó
  14.             [Nombre] => Gir1
  15.         )
  16.  
  17. )
  18. </pre>
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #24 (permalink)  
Antiguo 06/03/2012, 08:18
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer array

A mi tal cual lo pones

Cita:
) Warning: DOMDocument::loadXML() [domdocument.loadxml]: Input is not proper UTF-8, indicate encoding
__________________
La ficción es y será mi única realidad
  #25 (permalink)  
Antiguo 06/03/2012, 08:21
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Recorrer array

se me olvido el:

$dom->encoding = 'utf-8';

Código PHP:
Ver original
  1. $dom = new DOMDocument('1.0', 'utf-8');
  2. $dom->loadXML($data);
  3. $dom->encoding = 'utf-8';
  4. header('Content-type: text/html; charset=utf-8');
  5. echo $dom->saveXML();

de todas formas es recomendable trabajar siempre con ut-8 así no tendras que hacer esas chapuzas del utf8_encode etc... ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
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 01:19.