2016-01-13 8 views
1

У меня возникают некоторые проблемы, пытаясь вытащить некоторые данные из многоуровневого json-url. Я могу получить все остальное, за исключением определенного вложенного раздела.Недопустимое смещение строки с многоуровневым декодированием json

{ 
    "name": "NewNationsPnW", 
    "count": 10, 
    "frequency": "Every 15 mins", 
    "version": 31, 
    "newdata": false, 
    "lastrunstatus": "success", 
    "thisversionstatus": "success", 
    "nextrun": "Wed Jan 13 2016 22:57:30 GMT+0000 (UTC)", 
    "thisversionrun": "Wed Jan 13 2016 22:42:30 GMT+0000 (UTC)", 
    "results": { 
    "collection1": [ 
     { 
     "Nation": { 
      "href": "https:\/\/politicsandwar.com\/nation\/id=30953", 
      "text": "Renegade States" 
     }, 
     "Founded": "01\/13\/2016", 
     "Alliance": "None", 
     "Continent": "North America", 
     "property7": "", 
     "index": 1, 
     "url": "https:\/\/politicsandwar.com\/nations\/" 
     } 
    ] 
    } 
} 

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

$request = "https://www.kimonolabs.com/api/4p7k02r0?apikey=qAnUSnSVi8B17hie7xbPh9ijikNLzBzk"; 
$response = file_get_contents($request); 
$json = json_decode($response, true); 

//echo '<pre>'; print_r($results); 

foreach($json['results']['collection1'] as $stat) { 
    foreach($stat['Nation'] as $stat1) { 

      echo $stat1; 

} 
    if($stat['Alliance'] == 'None') { 
    echo $stat['Founded'] . " - " . $stat['Alliance'] . " - " . $stat['Continent'] . "<br />"; 
} 
} 

Я попытался следующие

foreach($json['results']['collection1'] as $stat) { 
    foreach($stat['Nation'] as $stat1) { 
      echo $stat1['text']; 
      echo $stat1['href']; 
    } 
    if($stat['Alliance'] == 'None') { 
    echo $stat['Founded'] . " - " . $stat['Alliance'] . " - " . $stat['Continent'] . "<br />"; 
} 
} 

, но я получаю

Illegal строка смещения 'текст' в parse.php на линии 10

Illegal строка Смещение «HREF 'в parse.php в строке 11

Как и отображает только

hhRR01/13/2016 - None - Северная Америка

hhFFhhDD01/13/2016 - Нет - Азия

Я уверен, что я делаю то, что легко исправить, но будучи новичком, я все испортил.

ответ

1

Ваш вложенный цикл не является необходимым, и причиной ваших ошибок:

foreach($json['results']['collection1'] as $stat) { 
    echo $stat['nation']['text']; 
    echo $stat['nation']['href']; 
} 
+0

Спасибо, я знал, что это то, чего я не хватало. – Ryahn

0

Там нет необходимости конвертировать совершенно хорошую структуру данных объекта JSON в массив.

<?php 
$request = "https://www.kimonolabs.com/api/4p7k02r0?apikey=qAnUSnSVi8B17hie7xbPh9ijikNLzBzk"; 
$response = file_get_contents($request); 
$j = json_decode($response); 

foreach ($j->results->collection1 as $collection1) { 
    echo $collection1->Nation->href; 
    echo $collection1->Nation->text; 

    if($collection1->Alliance == 'None') { 
     echo sprintf("%s - %s - %s<br />", 
        $collection1->Founded, 
        $collection1->Alliance, 
        $collection1->Continent 
        ); 
    } 
}