Как сделать foreach l oop из JSON, который приходит из JSON - PullRequest
1 голос
/ 28 марта 2020

Мой код ниже для извлечения и декодирования JSON данных. Дело в том, что я также извлекаю файл JSON, который был в первом. И из этого второго я хочу отобразить изображение.

$json = @file_GET_contents('https://www.url.com/api?app_id='.$app_id.'&token='.$token.'&limit=10');
$results = json_decode($json, true)['result'];

foreach ($results as $json) {
$json = @file_GET_contents(''.$json['url'].'?app_id='.$app_id.'&token='.$token.'');
$details = json_decode($json, true);
$img = $details['image'];
}

echo '<ul>';
foreach ($results as $result) {
echo '<li>';
echo '<span><p>'.$result['name'].'</p></span>';
echo '<span><p>'.$result['title'].'</p></span>';
echo '<span><img src="'.$img.'"></span>';
echo '</li>';
}
echo '</ul>';

Ниже приведен пример первого JSON ответа, из которого я получаю и декодирую "url":

{
"count": 10,
"total": 362,
"results": [
{
"name": "Example 1",
"url": "https://url.to.info1.json",
"title": "Example 1"
},
{
"name": "Example 2",
"url": "https://url.to.info2.json",
"title": "Example 2"
}
]
}

Второй json файл. Я пробовал несколько вещей, но не могу придумать решение.

1 Ответ

1 голос
/ 28 марта 2020

Вы перезаписываете переменную $img снова и снова внутри l oop, поэтому каждый раз отображается одно и то же изображение.

Решение: Используйте переменную key из $result, чтобы добавить URL изображения в $result сама переменная:

foreach ($results as $key=>$json) { //use key
   $json = file_get_contents(''.$json['url'].'?app_id='.$app_id.'&token='.$token.'');
   $details = json_decode($json, true);
   $results[$key]['image'] = $details['image']; // based on key add image URL
}

echo '<ul>';
foreach ($results as $result) {
  echo '<li>';
  echo '<span><p>'.$result['name'].'</p></span>';
  echo '<span><p>'.$result['title'].'</p></span>';
  echo '<span><img src="'.$result['image'].'"></span>'; // Use `$result` variable now
  echo '</li>';
}
echo '</ul>';

Примечание: - не используйте @ (error suppressor), а file_GET_contents должно быть file_get_contents

...