SimpleXMLElement Object ( [@attributes] => Array ( [version] => 2.0 ) [channel] => SimpleXMLElement Object ( [title] => Yahoo!ニュース・トピックス - トップ [link] => http://news.yahoo.co.jp/ [description] => aa [language] => ja [pubDate] => Mon, 17 Aug 2015 10:20:57 +0900 [item] => Array ( [0] => SimpleXMLElement Object ( [title] => aa [link] => aa [pubDate] => aa [enclosure] => SimpleXMLElement Object ( [@attributes] => Array ( [length] => 133 [url] => http://img.ruphp.com/database/photo.gif [type] => image/gif ) [0] => ) [guid] => yahoo/news/topics/6170952 ) [1] => SimpleXMLElement Object ( [title] => bb [link] => bb [pubDate] => bb [enclosure] => SimpleXMLElement Object ( [@attributes] => Array ( [length] => 133 [url] => http://img.ruphp.com/database/photo.gif [type] => image/gif ) [0] => ) [guid] => yahoo/news/topics/6170951 )
У меня этот массив, который очень запутан для меня как новичок. Я просто хочу поместить title, link and pubDate
из 0=> SimpleXMLELement Object
и 1 => SimpleXMLElement Object
который содержит aa
и bb
в моей таблице, извлеченной из mysql.
Моя таблица выглядит так:
Title PubDate Link
и я хочу поставить «aa» и «bb» под каждым из названий в таблице.
Вот что я пробовал:
foreach($con as $key => $val){ while($key == title){ $Title['title'] = $val; } return $Title['title']; }
То, что я пытался сделать, – это пометить ключи и значения с помощью $key
и $val
, а когда $key = title
, я хотел поместить все заголовки в один массив, но, к сожалению, это не сработало.
Предполагая, что $ xmlStructure – это структура, опубликованная выше, ваш код должен выглядеть примерно так:
$items = $xmlStructure->channel->item; $table = []; foreach ($items as $item) { $table[] = [ 'title' => $item->title, 'pubDate' => $item->pubDate, 'link' => $item->link; ]; }
В конце этого ваш массив $ table будет содержать массив сущностей, каждый из которых содержит три поля.
Затем построение таблицы HTML (или таблицы другого типа) должно быть довольно простым.
Попробуй это:
$array_to_get = ['title', 'link', 'pubDate']; $newArray = []; $con = $xmlStructure->channel->item; //Object from xml foreach($con as $key => $val){ if(in_array($key, $array_to_get)){ $newArray['title'] = $val->title; $newArray['link'] = $val->link; $newArray['pubDate'] = $val->pubDate; } } print_r($newArray);
Фактически, этот массив не является сложным вообще, как только вы начинаете понимать, что происходит и как его структурированный он будет продолжать превращаться в кусок пирога с течением времени. Вместо того чтобы я показывал вам, что делать, я собираюсь подробно объяснить, как читать такой массив и как это сделать, и таким образом вы будете знать, что делать в будущем.
Например, скажем, вы хотите получить доступ к значению версии в этой части массива:
SimpleXMLElement Object ( [@attributes] => Array ( [version] => 2.0 ) )
Сначала вы бы сохранили это в переменной, и каждый уровень под массивом был настроен так и сказал, что этот массив хранится в $ container
//with @attributes you access it as a function, anything with @ is access as a function, example below. $version = $container->attributes()->['version']
теперь говорите, что хотите получить доступ к названию, ссылке, публике и т. д.
вы бы сделали
$title = $container->channel->title; $link = $container->channel->link; $description = $container->channel->description //notice how after channel i used it as an object instead of an array , its because after channel it mentions that its an SimpleXMLElement Object.
Теперь скажите, что вы хотите получить доступ к каждому элементу под элементом, где он имеет значения, начиная с 0.
$collection = $container->channel->item;
теперь это содержит все элементы элемента. Чтобы доказать это, просто выполните print_r ($ collection), и вы увидите коллекцию возвращаемых вами данных и для получения вывода своей коллекции вы можете просто сделать простой цикл foreach, чтобы получить все значения, как показано:
foreach($collection as $items) { echo 'Title: ' . $items->title . '<br/>'; echo 'Link: ' . $items->link . '<br/>'; echo 'Pubdate' . $items->pubDate . '<br/>'; //and so on }
Как только вы это поймете, вы можете создать свою таблицу или что-то еще, что вам нужно сделать, но вы должны сначала понять, как читать такие массивы.