2015-08-17 2 views
1
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://i.yimg.jp/images/icon/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://i.yimg.jp/images/icon/photo.gif 
              [type] => image/gif 
             ) 

            [0] => 

           ) 

          [guid] => yahoo/news/topics/6170951 
         ) 

У меня есть этот массив, который очень запутан для меня как новичок. Я просто хочу поставить title, link and pubDate от 0=> SimpleXMLELement Object и 1 => SimpleXMLElement Object, который имеет aa и bb в них в мой стол, вытащенный из mysql.Ввод в таблицу из сложного массива с использованием php

Моя таблица выглядит:

Title 
PubDate 
Link 

, и я хочу поставить «аа» и «бб» по каждому из заголовков в таблице.

Это то, что я пробовал:

foreach($con as $key => $val){ 
    while($key == title){ 
     $Title['title'] = $val; 
    } 
    return $Title['title']; 
} 

То, что я пытался сделать, это ярлык ключи и значения с $key и $val, и когда $key = title, я хотел поставить все титулы в один массив, но, к сожалению, это не сработало.

ответ

1

Предполагая, что $ xmlStructure структура размещена выше, ваш код должен выглядеть примерно так:

$items = $xmlStructure->channel->item; 
$table = []; 
foreach ($items as $item) { 
    $table[] = [ 
     'title' => $item->title, 
     'pubDate' => $item->pubDate, 
     'link' => $item->link; 
    ]; 
} 

В конце этого, ваш $ массив таблица будет содержать массив сущностей, каждый из которых содержит три поля.

Тогда построение таблицы HTML (или таблицы другого типа) должно быть довольно простым.

+0

В нем указано, что в строке 27 есть «$ table = [];« –

+0

». В более старых версиях PHP вам может потребоваться использовать: $ table = array(); –

+0

Извините, но он говорит, что неверный аргумент, предоставленный foreach в третьей строке. –

2

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

$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); 
+0

В нем говорится, что в первой строке вашей программы есть «[». Что мне делать? –

+0

изменить значение [] на 'array();' – aldrin27

+0

Не знаю почему, но он дает ошибку для третьей строки вашего кода как недопустимый аргумент, предоставленный foreach() –

1

Фактически, этот массив не является сложным вообще, как только вы начинаете понимать, что происходит, и как его структурированное это будет по-прежнему стать куском пирога с течением времени. Вместо того чтобы я показывал вам, что делать, я собираюсь подробно объяснить, как читать такой массив и как это сделать, и таким образом вы будете знать, что делать в будущем.

Пример, позволяет сказать, что вы хотите получить доступ к значению версии в этой части массива:

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [version] => 2.0 
     ) 
) 

Сначала вы бы это хранится в переменной, и каждый уровень под массив является установка, как это и сказать этот массив хранятся в $ контейнере

//with @attributes you access it as a function, anything with @ is access as a function, example below. 
$version = $container->attributes()->['version'] 

теперь говорит, что вы хотите получить доступ к заголовку, ссылке, PubDate т.д.

вы могли бы сделать

$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 
} 

Как только вы это понимаете, вы можете создать свой стол или что-то еще, что вам нужно, но вы должны сначала понять, как читать массивы, подобные этому.

Смежные вопросы