1

phpの単純なxmlオブジェクトで問題が発生しています。

ログに次のxmlデータがあります

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [title] => test
            [scanner] => Data
            [id] => WordData
            [position] => 1800
            [error] => false
            [num] => 6
        )

    [subpod] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [title] => Surnames
                        )

                    [plaintext] => Common (US population: 650 people, white: 63% | black: 35%)
                    [img] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (

                                    [alt] => Common (US population: 650 people, white: 63% | black: 35%)
                                    [title] => Common (US population: 650 people, white: 63% | black: 35%)
                                    [width] => 349
                                    [height] => 18
                                )

                        )

                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [title] => Cities
                        )

                    [plaintext] => Littleton Common (Massachusetts, 2789 people)
                    [img] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (

                                    [alt] => Littleton Common (Massachusetts, 2789 people)
                                    [title] => Littleton Common (Massachusetts, 2789 people)
                                    [width] => 287
                                    [height] => 18
                                )

                        )

                )

            [2] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [title] => Buildings
                        )

                    [plaintext] => Rotunda on Woolwich Common (London, Greater London)
                    [img] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (

                                    [alt] => Rotunda on Woolwich Common (London, Greater London)
                                    [title] => Rotunda on Woolwich Common (London, Greater London)
                                    [width] => 356
                                    [height] => 18
                                )

                        )

                )
              .....more simpleXmlElement object
          )
)

私のphp変数です$xmlObj = SimpleXMLElement Objectが、私が次のものを持っているとき

if (is_array($xmlObj->subpod)){
    echo 'is array';    
}else {
    echo 'not array';
}

出力は常に「配列ではありません」であり、コードをエコーさせたい「配列です」

$xmlObj->subpod配列だと思いました。テスト$xmlObj->subpod[0]->plaintextすると、実際には文字列が返されます。この問題を解決する方法がわかりません。誰か助けてもらえますか?

4

2 に答える 2

2

SimpleXMLElement Objectすべての中にはSimpleXMLElement Object、print_rとvar_dumpが配列に関するものである場合があります。これらはトラバース可能なオブジェクトですが、ほとんどの操作は配列であるかのように実行できます。純粋な配列を使用する場合は、このノードを配列にキャストできます。

$subpod = (array)$xmlObj->subpod;
于 2012-10-31T00:19:46.977 に答える
2

もしそうなら、あなたはそれがまだオブジェクトvar_dump($xmlObj->subpod)であることがわかるでしょう。SimpleXMLElementただし、それでも配列であるかのように呼び出すことができます。(この例の後の注を参照してください。これは、クラスのドキュメントでは実装されていなくても、クラスがArrayAccessを実装していることを示唆しています。)

この構造をチェックする正しい方法は、SimpleXMLElement :: count()を使用することです。

if ($xmlObj->subpod->count() > 0) { ... }

編集:あなたの質問の出力はおそらくからprint_rのものであり、それは時々その出力ではかなり役に立たないことがあります(例えば、そうでないときに何かが配列であるとあなたに言う)。var_dump一般的にデバッグに役立つため、代わりに使用してみてください。ここでの唯一の注意点は、SimpleXMLElementオブジェクトのネストされたオブジェクト構造全体を表示できないことです。

于 2012-10-31T00:08:03.183 に答える