2010-11-30 22 views
6

Ich habe dieses SimpleXML Objekt:Warum gibt is_array() false zurück?

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

Warum is_array ($ object-> Datensatz) false zurück? Es sagt eindeutig, dass es ein Array ist. Warum kann ich es nicht mit is_array erkennen?

Auch ich kann es nicht als ein Array mit (Array) $ Objekt-> Datensatz zu werfen. Ich erhalte diesen Fehler:

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

+2

vertrauen Nicht immer 'var_dump()' oder 'print_r()' mit SimpleXML. –

Antwort

5

SimpleXML-Knoten sind Objekte, die andere SimpleXML-Knoten enthalten können. Verwenden Sie iterator_to_array().

+0

Ich habe diese Antwort akzeptiert, da es mir erlaubt hat, meine Aufgabe zu erfüllen. Vielen Dank für Ihre Anregungen. – doremi

4

Es ist kein Array. Die var_dump Ausgabe ist irreführend. Bedenken Sie:

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

Ausgang:

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

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

Wie Sie durch die zweite var_dump sehen kann, ist es eigentlich ein SimpleXMLElement.

3

löste ich das Problem mit count() Funktion:

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