2010-11-30 31 views
6

que tienen este objeto SimpleXML:¿Por qué is_array() devuelve falso?

object(SimpleXMLElement)#176 (1) { 
["record"]=> 
array(2) { 
    [0]=> 
    object(SimpleXMLElement)#39 (2) { 
    ["f"]=> 
    array(2) { 
     [0]=> 
     string(13) "stuff" 
     [1]=> 
     string(1) "1" 
    } 
    } 
    [1]=> 
    object(SimpleXMLElement)#37 (2) { 
    ["f"]=> 
    array(2) { 
     [0]=> 
     string(13) "more stuff" 
     [1]=> 
     string(3) "90" 
    } 
    } 
} 

¿Por qué is_array ($ objeto-> registro) return false? Claramente dice que es una matriz. ¿Por qué no puedo detectarlo usando is_array?

Además, no puedo convertirlo en una matriz usando (matriz) $ object-> record. Obtengo este error:

Warning: It is not yet possible to assign complex types to properties

+2

No vuelvas confiar 'var_dump()' 'o print_r()' con SimpleXML. –

Respuesta

5

Los nodos SimpleXML son objetos que pueden contener otros nodos SimpleXML. Use iterator_to_array().

+0

He aceptado esta respuesta ya que me permitió realizar mi tarea. Gracias a todos por su aporte. – doremi

4

No es una matriz. La salida var_dump es engañosa. Considere:

<?php 
$string = <<<XML 
<?xml version='1.0'?> 
<foo> 
<bar>a</bar> 
<bar>b</bar> 
</foo> 
XML; 
$xml = simplexml_load_string($string); 
var_dump($xml); 
var_dump($xml->bar); 
?> 

Salida:

object(SimpleXMLElement)#1 (1) { 
    ["bar"]=> 
    array(2) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    } 
} 

object(SimpleXMLElement)#2 (1) { 
    [0]=> 
    string(1) "a" 
} 

Como se puede ver por la segunda var_dump, es en realidad un SimpleXMLElement.

3

He resuelto el problema con count() función:

if(count($xml) > 1) { 
    // $xml is an array... 
} 
Cuestiones relacionadas