0

SimpleXMLを使用してこのオブジェクトを解析しました。

SimpleXMLElement Object
(
[contact] => SimpleXMLElement Object
    (
        [name] => Some guy
        [number] => **********
    )

[messages] => SimpleXMLElement Object
    (
        [msg] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [from] => Some guy
                        [message] => Hey
                        [5] => SimpleXMLElement Object
                            (
                            )

                    )

                [1] => SimpleXMLElement Object
                    (
                        [from] => Qasim Iqbal
                        [message] => Hows it going?
                    )

                [2] => SimpleXMLElement Object
                    (
                        [from] => Some guy
                        [message] => Not bad... just doing some homework
                    )

                [3] => SimpleXMLElement Object
                    (
                        [from] => Some guy
                        [message] => Im just kidding I'm playing games
                    )

                [4] => SimpleXMLElement Object
                    (
                        [from] => Qasim Iqbal
                        [message] => lol...
                    )

            )

    )

)

私のPHPファイルでは、オブジェクトの名前は$chatです。私の目標は、[msg]配列に別の要素を追加して、配列全体が次のようになるようにすることです。

[msg] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [from] => Some guy
                    [message] => Hey
                )

            [1] => SimpleXMLElement Object
                (
                    [from] => Qasim Iqbal
                    [message] => Hows it going?
                )

            [2] => SimpleXMLElement Object
                (
                    [from] => Some guy
                    [message] => Not bad... just doing some homework
                )

            [3] => SimpleXMLElement Object
                (
                    [from] => Some guy
                    [message] => Im just kidding I'm playing games
                )

            [4] => SimpleXMLElement Object
                (
                    [from] => Qasim Iqbal
                    [message] => lol...
                )

            [5] => SimpleXMLElement Object
                (
                    [from] => Some guy
                    [message] => what are you laughing at?
                )

        )

キー「5」の要素がどのように追加されたかに注目してください。私はこのようにしようとしています:

$chat->messages->msg->addChild(sizeof($chat->messages->msg));

しかし、$ chat-> messages-> msgは、配列全体ではなく、$ chat-> messages-> msg [0]のように自動的に定義されるため、何らかの理由で機能しません。何が問題なのですか?

4

2 に答える 2

2

そのprint_r出力の「配列」は実際には配列ではありません。これは、4つの子要素がすべて呼び出されるSimpleXMLオブジェクトの状態を表示するためのPHPの試みにすぎません。<msg>

この->addChild()メソッドは、子を作成する親ノードで実行する必要があります。

$chat->messages->msgmessagesタグ名を持つのすべての子ノードのリストを返します<msg>; ご存知のように、SimpleXMLが単一の要素に作用する必要がある場合は、そのリストの最初の項目が必要であると想定します。

これらのどちらもあなたが望むものではありません-あなた<msg>はノードに新しい子を追加し$chat->messages、次にその2つの子(<from><message>ノード)を追加したいと思います。

これを試して:

$new_item = $chat->messages->addChild('msg');
$new_item->addChild('from', 'Some guy');
$new_item->addChild('message', 'what are you laughing at?');
于 2012-09-19T15:14:51.693 に答える
1

SimpleXMLは、物事を非常に混乱させる可能性のある多くのautomagic型強制を実行します。このようなことを試しましたか?

$messages = (array) $chat->messages;
$messages[] = (object) array(
  'from' => 'Barak Obama',
  'message' => 'I love you.',
);
于 2011-07-22T22:08:49.680 に答える