Есть в XML ветвления, например: "genre" и "country", у которых "дети" с названием "name". В рамках учебного курса хочу записать все жанры фильма в один массив, чтоб в дальнейшем преобразовать его в строку функцией implode
и записать в базу данных.
Перепробывал много вариантов, один из них:
$filmTitle = null;
$filmTitleOriginal = null;
$filmYear = null;
$filmCountry[] = null;
$filmGenre[] = null;
$filmPoster = null;
foreach ($xml as $movieKey => $movie) {
$filmTitle = $movie->title_russian;
$filmTitleOriginal = $movie->title_original;
$filmYear = $movie->year;
foreach ($movie->country->children() as $countryKey => $country) {
$filmCountry[] = $country;
}
foreach ($movie->genre->children() as $genreKey => $genre) {
$filmGenre[] = $genre;
}
foreach ($movie->poster->big->attributes() as $posterKey => $poster) {
$filmPoster = $poster;
}
echo $filmTitle . '<br>'
. $filmTitleOriginal . '<br>'
. $filmYear . '<br>'
. implode(', ', $filmCountry) . '<br>'
. implode(', ', $filmGenre) . '<br>'
. $filmPoster . '<br>';
}
Файл XML:
<?xml version="1.0"?>
<response>
<movie>
<id>154054</id>
<type>movie</type>
<title_russian>Джой</title_russian>
<title_original>Joy</title_original>
<year>2015</year>
<runtime>0</runtime>
<poster>
<small url="http://c.cinemate.cc/media/m/4/5/154054/0.small.jpg"/>
<medium url="http://c.cinemate.cc/media/m/4/5/154054/0.medium.jpg"/>
<big url="http://c.cinemate.cc/media/m/4/5/154054/0.big.jpg"/>
</poster>
<url>http://cinemate.cc/movie/154054/</url>
<country>
<name>США</name>
</country>
<genre>
<name>биография</name>
<name>драма</name>
<name>комедия</name>
</genre>
</movie>
<movie>
<id>159513</id>
<type>movie</type>
<title_russian>Лазурный берег</title_russian>
<title_original>By the Sea</title_original>
<year>2015</year>
<runtime>0</runtime>
<poster>
<small url="http://c.cinemate.cc/media/m/3/1/159513/0.small.jpg"/>
<medium url="http://c.cinemate.cc/media/m/3/1/159513/0.medium.jpg"/>
<big url="http://c.cinemate.cc/media/m/3/1/159513/0.big.jpg"/>
</poster>
<url>http://cinemate.cc/movie/159513/</url>
<country>
<name>США</name>
</country>
<genre>
<name>драма</name>
<name>мелодрама</name>
</genre>
</movie>
</response>
Как можно решить данный вопрос?
Во-первых, вы объявляете пустой массив не верно, присваивая элементу с индексом 0
значение null
. Должно быть так:
$filmCountry = [];
Во-вторых, обнулять переменные нужно в пределах итерации.
В-третьих, при взятии атрибута, его необходимо явно указывать: url
.
$response = simplexml_load_file('movie.xml');
foreach ($response as $movie) {
$countries = [];
$genres = [];
foreach ($movie->country->children() as $country) {
$countries[] = $country;
}
foreach ($movie->genre->children() as $genre) {
$genres[] = $genre;
}
echo '<pre>',
$movie->title_russian . '<br>',
$movie->title_original . '<br>',
$movie->year . '<br>',
implode(', ', $countries) . '<br>',
implode(', ', $genres) . '<br>',
$movie->poster->big->attributes()->url,
'</pre>';
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Собственно вопрос в том , как сделать обращение в баззу данных при помощи браузераЯ знаю ,что это делается при помощи php (запросы в MySQL) и javascript(делаем...
В классе реализую метод который должен возвращать одно значениеМеня похоже заклинило нужна подсказка
Вообщем ребят нужен ваш совет или же помощь, есть алгоритм из другой областиНужно на его основе создать (???) Я признаться даже не знаю как это...