проблема с доступом к отдельным элементам XML

Serebos

Новичок
Всем привет. Разбираюсь с модулем SimpleXML. Столкнулся с проблемой доступа к отдельным элементам.
Подключил файл
PHP:
$xml = simplexml_load_file("xml/movies.xml") or die("Error: Cannot create object");
в нем, корневой элемент содержит 25 дочерних. Вот часть структуры xml файла
XML:
SimpleXMLElement Object
(
    [movie] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [id] => 154054
                    [type] => movie
                    [title_russian] => Джой
                    [title_original] => Joy
                    [year] => 2015
                    [runtime] => 0
                    [poster] => SimpleXMLElement Object
                        (
                            [small] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/4/5/154054/0.small.jpg
                                        )

                                )

                            [medium] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/4/5/154054/0.medium.jpg
                                        )

                                )

                            [big] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/4/5/154054/0.big.jpg
                                        )

                                )

                        )

                    [url] => http://cinemate.cc/movie/154054/
                    [country] => SimpleXMLElement Object
                        (
                            [name] => США
                        )

                    [genre] => SimpleXMLElement Object
                        (
                            [name] => Array
                                (
                                    [0] => биография
                                    [1] => драма
                                    [2] => комедия
                                )

                        )

                    [description] => Joy is the story of the title character, who rose to become founder and matriarch of a powerful family business dynasty.
                )

            [1] => SimpleXMLElement Object
                (
                    [id] => 159513
                    [type] => movie
                    [title_russian] => Лазурный берег
                    [title_original] => By the Sea
                    [year] => 2015
                    [runtime] => 0
                    [poster] => SimpleXMLElement Object
                        (
                            [small] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/3/1/159513/0.small.jpg
                                        )

                                )

                            [medium] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/3/1/159513/0.medium.jpg
                                        )

                                )

                            [big] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/3/1/159513/0.big.jpg
                                        )

                                )

                        )

                    [url] => http://cinemate.cc/movie/159513/
                    [country] => SimpleXMLElement Object
                        (
                            [name] => США
                        )

                    [genre] => SimpleXMLElement Object
                        (
                            [name] => Array
                                (
                                    [0] => драма
                                    [1] => мелодрама
                                )

                        )

                    [description] => A couple tries to repair their marriage while staying at a hotel in France.
                )

            [2] => SimpleXMLElement Object
                (
                    [id] => 157449
                    [type] => movie
                    [title_russian] => Защитник
                    [title_original] => Concussion
                    [year] => 2015
                    [runtime] => 0
                    [poster] => SimpleXMLElement Object
                        (
                            [small] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/9/4/157449/0.small.jpg
                                        )

                                )

                            [medium] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/9/4/157449/0.medium.jpg
                                        )

                                )

                            [big] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://c.cinemate.cc/media/m/9/4/157449/0.big.jpg
                                        )

                                )

                        )

                    [url] => http://cinemate.cc/movie/157449/
                    [country] => SimpleXMLElement Object
                        (
                            [name] => Array
                                (
                                    [0] => Австралия
                                    [1] => Великобритания
                                    [2] => США
                                )

                        )

                    [genre] => SimpleXMLElement Object
                        (
                            [name] => Array
                                (
                                    [0] => драма
                                    [1] => спорт
                                )

                        )

                    [description] => In Pittsburgh, accomplished pathologist Dr. Bennet Omalu uncovers the truth about brain damage in football players who suffer repeated concussions in the course of normal play.
                )
Запрос
Код:
$xml_node = $xml->movie; 
echo $xml_node->title_original[0];
или
echo $xml->movie->title_original[0];
Выводит корректное знание в браузере.
Когда подставляю другое значение элемента, например 2 или 3 в title_original - ничего не выводит.
PHP:
$xml_node = $xml->movie; 
echo $xml_node->title_original[2];
Подскажите, пожалуйста, в чем причина этого поведения? Спасибо.
 

Serebos

Новичок
такой вариант работает!
PHP:
echo $xml->movie[2]->title_original;
С первым вариантом не понятно, пока еще...
 

Фанат

oncle terrible
Команда форума
На стоянке стоит 25 такси.
Есть разница -
подхожу к 25 такси, сажусь, втыкаю телефончик в прикуриватель
или
подхожу к такси, сажусь, втыкаю телефончик в 25 прикуриватель?
 

Serebos

Новичок
есть, в 25 такси - есть, хотя бы, один прикуриватель, а в "?"такси, по крайней мере, должен быть прикуриватель под номером 25 (количество самих прикуривателей непонятно).
Примеры взяты с литературы! Возможно, для более ранних версий PHP верны, возможно вовсе неправильны.

Фанат, спасибо, за комментарий.
 

AnrDaemon

Продвинутый новичок
Примеры взяты с литературы!
Недостаточно взять пример, надо ещё понять, почему он вообще работает.
Вам явно не хватает понимания самых основ языка. Базовые синтаксические конструкции: переменные, массивы, объекты и классы, адресация.
 

Serebos

Новичок
Спасибо, AnrDaemon, за рекомендацию. Приму ко вниманию.

так выглядит более понятно и логично,
PHP:
$xml_node = $xml->movie[2];              
echo $xml_node->title_original;
нежели, специалист проиллюстрировал в своем примере!
PHP:
$xml_node = $xml->movie;
echo $xml_node->title_original[0];
 

Serebos

Новичок
Я соглашаюсь с тем, что могу говорить глупости по коду PHP, в силу накопленных знаний. Такая запись уж точно бы указала на синтаксис записи.
PHP:
$xml_node = $xml->movie[0];                
echo $xml_node->title_original[0];
Поскольку тот один ноль сложил впечатление - обращение к [0] => SimpleXMLElement Object исходя из результата в браузере!
 

Фанат

oncle terrible
Команда форума
Примеры взяты с литературы!
Вот опять ты занимаешься фигнёй.
Я тебе сто раз уже говорил - не надо пытаться присобачить к своему коду пример "из литературы", который не имеет к твоему коду никакого отношения.
Примеры вообще не надо "брать". Их надо ПОНИМАТЬ.
Чтобы потом можно было применить для своего случая.

есть, в 25 такси - есть, хотя бы, один прикуриватель, а в "?"такси, по крайней мере, должен быть прикуриватель под номером 25 (количество самих прикуривателей непонятно).
ЧТО ТЫ НЕСЁШЬ?
В такси нету 25 прикуривателей. он там ОДИН
Ты можешь вообще отличить ситуацию, когда у тебя 25 машин, каждая с 1 прикуривателем ли машина одна и в ней 25 прикуривателей?
Или твоему искалеченному мозгу всё едино?
 
Последнее редактирование:

Serebos

Новичок
На стоянке стоит 25 такси.
Есть разница -
подхожу к 25 такси, сажусь, втыкаю телефончик в прикуриватель
или
подхожу к такси, сажусь, втыкаю телефончик в 25 прикуриватель?
Я все это понял.
Исходя из условий, тобою поставленных для иллюстрации ситуации.
25 такси на стоянке.
1.Ты сел в 25 такси (непонятно как посчитано, но это 25 такси) и сунул телефон в прикуриватель (уточнений нет: один, два прикуривателя, черный, зеленый...).
2. Ты сел в одно из 25 такси и подключил телефон к 25 прикуривателю (уточнений нет: то ли там надпись 25 на нем, то ли там мега-разветвитель стоит на 25 гнезд, то ли на 2 гнезда: с номером 1 и 25....)

Это по умолчанию, мы понимаем, что в реальной жизни в основном один прикуриватель а автомобиле!
Я рассуждал из условий описанной гипотетической ситуации!
Где я неправильно я истолковал условия ситуации?
 

Фанат

oncle terrible
Команда форума
На стоянке 25 такси, в каждом по одному прикуривателю
А не одно такси с 25 дырками.

В ХМЛ у тебя 25 фильмов, в каждом по одному названию.
А не один фильм с 25 названиями.

ТЕПЕРЬ понятно, почему
echo $xml->movie[2]->title_original; выводит,
а
echo $xml_node->title_original[2];
- нет?
 

Serebos

Новичок
Фанат, спасибо за твое участие и помощь. Сегодня у меня возможность была только до обеда посидеть за компом. Потому так поздно и отписываю.
Это мне стало понятно еще утром! "ТЕПЕРЬ понятно, почему...."
Я дал описание ситуации исходя из условий, что поступили от тебя! И если бы, я никогда не видел машину - мое описание абсолютно точно соответствует условиям.
Так получилось, что моя интерпретация полностью удовлетворила мой утренний вопрос, хотя ты рисовал себе картинку совсем по-другому. Относительно ХМЛ - то код сработает в том случае, если бы условие (например, название фильмов было на 25 языках), и 25 был бы на арамейском или просто присутствовала вариация с ключом [25].
например:

PHP:
echo $xml->movie->title_aramaic[25];

или
    
echo $xml->movie->title_original[25];
Одни и те же слова вызывают у каждого свой ассоциативный ряд и свою картинку в голове. Та же история и с PHP, о котором я только слышал, но ничего не знал еще 3 месяца назад.
Я прислушиваюсь к мнению людей, которые понимают больше меня в том, что я хочу познать.
Мне кажется, ты видишь более рациональный путь в изучении PHP, нежели я иду.
Логика моих действий: есть курс (плохой/хороший, не суть важно), то что там на примерах показано - работает, курс наполнен теоретическими и практическими заданиями. То, что я по теории читаю, я записываю в тетрадь и пытаюсь как-то проверить в работе. Ни один курс не может содержать полную информацию о предмете исследования.
Программа курса: html, css, bootstap, php, codegniter, jscript, jquery. После этого, я найду обширный курс сугубо по PHP.
html, css, bootstap - я уже прошел и хороший результат, учитывая, что все с ноля.

Мне кажется, что для каждого программиста известна ситуация: непонятно с чего начинать, что за чем в самом начале пути (относительно тех, кто самостоятельно изучил предмет и стал программистом). Этот курс (html, css, bootstap, php, codegniter, jscript, jquery) послужил толчком в моей старте.

Если ты можешь дать конкретные практические рекомендации, буду весьма благодарен и приму ко вниманию.
 

AnrDaemon

Продвинутый новичок
Одни и те же слова вызывают у каждого свой ассоциативный ряд и свою картинку в голове.
Для того, чтобы так не происходило, существуют правила синтаксического разбора и устоявшаяся терминология.

Мне кажется, что для каждого программиста известна ситуация: непонятно с чего начинать, что за чем в самом начале пути
В самом начале пути документация на язык. https://www.php.net/docs.php (самое смешное, что она на русском).
 
Сверху