Как добавить элемент в массив внутри объекта SimpleXMLElement - PullRequest
0 голосов
/ 23 июля 2011

Я проанализировал этот объект с помощью 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],а не весь массив.В чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 19 сентября 2012

«Массив» в этом выводе print_r на самом деле не является массивом - это всего лишь попытка PHP показать вам состояние объекта SimpleXML, который имеет 4 дочерних элемента, каждый из которых называется <msg>

Метод ->addChild() необходимо запустить на родительском узле , для которого вы хотите создать дочерний элемент.

$chat->messages->msg вернет вам список всех дочерних узлов messages с именем тега <msg>; как вы выяснили, если SimpleXML должен действовать на один элемент, он будет предполагать, что вам нужен первый элемент в этом списке.

Ничего из этого не является тем, что вы хотите - вы хотите добавить новый <msg> дочерний элемент к узлу $chat->messages, затем два дочерних элемента этого (узлы <from> и <message>).

Попробуйте это:

$new_item = $chat->messages->addChild('msg');
$new_item->addChild('from', 'Some guy');
$new_item->addChild('message', 'what are you laughing at?');
0 голосов
/ 23 июля 2011

SimpleXML выполняет много автоматических операций с типами, которые могут привести к путанице. Вы пробовали что-то подобное?

$messages = (array) $chat->messages;
$messages[] = (object) array(
  'from' => 'Barak Obama',
  'message' => 'I love you.',
);
...