检查它是否是SimpleXMLElement对象的数组

时间:2017-05-02 14:47:51

标签: php arrays object

我有跟随php对象转储的问题。我试着检查"价格"是一个数组,PHP返回我总是假的。数组的 var_dump()"价格"返回我的第一个数组元素而不是整个数组。哪个错了?如何检查它是否是一个数组?

object(SimpleXMLElement)#197 (1) {
    ["price"]=>  array(4) {
        [0]=>    object(SimpleXMLElement)#156 (4) {
            ["room_id"]=>      string(4) "1755"
            ["room_seq"]=>      string(1) "1"
            ["offer_id"]=>      string(4) "5842"
            ["price_total"]=>      object(SimpleXMLElement)#205 (2) {
                ["price_typ"]=>        string(1) "0"
                ["price_hb"]=>        string(4) "2450"
            }
        }
        [1]=>    object(SimpleXMLElement)#143 (4) {
            ["room_id"]=>      string(5) "24206"
            ["room_seq"]=>      string(1) "1"
            ["offer_id"]=>      string(4) "5842"
            ["price_total"]=>      object(SimpleXMLElement)#205 (2) {
                ["price_typ"]=>        string(1) "0"
                ["price_hb"]=>        string(4) "2450"
            }
        }
        [2]=>    object(SimpleXMLElement)#135 (4) {
            ["room_id"]=>      string(4) "1755"
            ["room_seq"]=>      string(1) "1"
            ["offer_id"]=>      string(6) "415725"
            ["price_total"]=>      object(SimpleXMLElement)#205 (2) {
                ["price_typ"]=>        string(1) "0"
                ["price_hb"]=>        string(6) "2327.5"
            }
        }
        [3]=>    object(SimpleXMLElement)#136 (4) {
            ["room_id"]=>      string(5) "24206"
            ["room_seq"]=>      string(1) "1"
            ["offer_id"]=>      string(6) "415725"
            ["price_total"]=>      object(SimpleXMLElement)#205 (2) {
                ["price_typ"]=>        string(1) "0"
                ["price_hb"]=>        string(6) "2327.5"
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

考虑一个简化的例子:

<root>
    <element>first</element>
    <element>second</element>
    <element>third</element>
</root>

$root->element实际上并不是一个数组。它是SimpleXMLElement个对象。您可以将其视为选择器,可以使用foreach遍历的元素集合,还可以使用索引访问特定对象:

$root->element[0]; //first object
$root->element[1]; //second
$root->element[2]; //third

以下是基本用法的更多示例:http://php.net/manual/en/simplexml.examples-basic.php

<小时/> 所以真正的问题是:如何定义集合中是否有多个元素?

您可以使用count()方法执行此操作:

if($es->result->hotel->channel->room_price->price->count() > 1){
    echo 'many elements';
}

了解详情:http://php.net/manual/en/simplexmlelement.count.php

答案 1 :(得分:0)

// simplexml_load_string() return false if not $XML
$xml = simplexml_load_string($pSdata);

if(gettype($xml)=='object')
{
    print_r(simplexmlArray($xml));
} else {
    echo "no xml input";
}

// simplexml_load $xml obj to array
function simplexmlArray ( $xmlObject, $out = array () )
{
    foreach ( (array) $xmlObject as $index => $node )
        $out[$index] = ( is_object ( $node ) ) ? simplexmlArray ( $node ) : $node;
    return $out;
}