2010-11-30 24 views
6

J'ai cet objet SimpleXML:Pourquoi is_array() renvoie false?

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" 
    } 
    } 
} 

Pourquoi is_array ($ object-> enregistrement) return false? Il dit clairement que c'est un tableau. Pourquoi ne puis-je pas le détecter en utilisant is_array?

De même, je ne peux pas le transformer en tableau en utilisant (array) $ object-> record. Je reçois cette erreur:

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

+2

Ne jamais faire confiance 'var_dump()' 'ou print_r()' avec SimpleXML. –

Répondre

5

Les nœuds SimpleXML sont des objets pouvant contenir d'autres nœuds SimpleXML. Utiliser iterator_to_array().

+0

J'ai accepté cette réponse car elle m'a permis d'accomplir ma tâche. Merci à tous pour votre contribution. – doremi

4

Ce n'est pas un tableau. La sortie var_dump est trompeuse. Considérez:

<?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); 
?> 

Sortie:

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

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

Comme vous pouvez le voir par le second var_dump, il est en fait un SimpleXMLElement.

3

je résolu le problème en utilisant la fonction count():

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