Цикл массива Foreach для JSON

1

Вот мой код PHP/JSON:

$json_url = "http://dailydota2.com/match-api";
$json = file_get_contents($json_url);
$json=str_replace('},
]',"}
]",$json);
$decoded= json_decode($json);
$data=$decoded->matches[0];
foreach ($data as $value) {
print_r($value->team1->logo_url);
}

Теперь у меня есть следующая проблема

Примечание. Попытка получить свойство не объекта

а также

Примечание. Неопределенное свойство: stdClass :: $ team1

Я просто хочу использовать foreach loop а затем показывать результаты в HTML.

Почему я получаю 2 упомянутые проблемы и как я могу показать правильные результаты?

  • 0
    Почему вы делаете str_replace на результат?
  • 0
    Вы пробовали var_dump($decoded) ?
Показать ещё 2 комментария
Теги:

2 ответа

1
  1. Хорошо, поэтому URL-адрес, который вы используете, возвращает VALID JSON, не нужно ничего менять!
  2. Я предлагаю использовать массивы, он всегда казался мне проще
  3. Вы хотите, чтобы logo_url из team или image_url из league? Я покажу как в моей реализации.

Итак, вот какой исправленный код

$json_url = "http://dailydota2.com/match-api";
$json = file_get_contents($json_url);
$decoded= json_decode($json,true); // True turns it into an array
$data = $decoded['matches'];
foreach ($data as $value) {
    //I am not sure which one you want!!!
    echo $value['league']['image_url'] . "<br>";
    echo $value['team1']['logo_url'] . "<br>";
    echo $value['team2']['logo_url'] . "<br>";
}

* РЕДАКТИРОВАТЬ Чтобы показать желаемую реализацию автором вопросов...

$json_url = "http://dailydota2.com/match-api";
$json = file_get_contents($json_url);
$decoded= json_decode($json,true); // True turns it into an array
$data = $decoded['matches'];
foreach ($data as $value) {
    echo "
        <img src=\"http://dailydota2.com/{$value['team1']['logo_url']}\">
        <img src=\"http://dailydota2.com/{$value['team2']['logo_url']}\">
    ";
}
  • 0
    спасибо ... отлично работает теперь я могу показать свои результаты в формате HTML? когда я пытаюсь это сделать <img src="http://dailydota2.com/<?php echo $value['team1']['logo_url'] ?>"> <img src="http://dailydota2.com/<?php echo $value['team2']['logo_url'] ?>"> покажите мне только последний результат, как я могу показать все результаты в html?
  • 0
    @jackson Я добавил реализацию, которая вам нужна!
1

Я проверил ваш код и получил несколько заметок и, надеюсь, решение:

1- Вы пытаетесь получить не существующий ключ из данных JSON, то есть сообщение, сообщающее вам.

2- Я все еще не уверен, что вы получаете от JSON API. Но в отношении документации dailydota2 в команде 1 ничего не называется image_url. Наверное, вы ищете logo_url или что-то в этом роде.

3- Не изменяйте формат JSON, как в коде, поэтому удалите следующую строку:

$json=str_replace('}, ]',"} ]",$json);

Просто оставить основной вывод JSON из API по умолчанию.

4- Когда вы пытаетесь получить конкретный ключ от декодированного JSON/Array, используйте следующий способ:

$data = $decoded->{'matches'};

вместо

$data=$decoded->matches[0];

Ссылка: http://php.net/manual/en/function.json-decode.php

5- И, наконец, ваш foreach loop работает, но нужен правильный ключ:

foreach ($data as $value) {
    print_r($value->team1->logo_url);
}

Когда все эти шаги будут выполнены, он должен работать.

Вот ваш окончательный исправленный код:

$json_url = "http://dailydota2.com/match-api";
$json = file_get_contents($json_url);
$decoded = json_decode($json);
$data = $decoded->{'matches'};
foreach ($data as $value) {
    print_r($value->team1->logo_url);
    echo '<img src="http://dailydota2.com/' . $value->team1->logo_url . '">';
}

Он возвращает следующий результат, и я не получаю никаких ошибок.

/images/logos/teams/cdecgaming.png/images/logos/teams/teamempire.png
/images/logos/teams/ehome.png/images/logos/teams/ehome.png
/images/logos/teams/fnatic.png/images/logos/teams/cloud9.png
/images/logos/teams/teamissecret.png/images/logos/teams/teamissecret.png
/images/logos/teams/natusvincere.png/images/logos/teams/fnatic.png

Опять же, я действительно не знаю, какую информацию вы хотите получить от API, но здесь у вас есть база рабочего кода, с которым вы можете работать дальше, чтобы получить требуемые данные от правильных KEY.

  • 0
    спасибо да, я имею в виду logo_url извините теперь я могу показать свои результаты в html? когда я пытаюсь сделать это <img src="http://dailydota2.com/<?php echo $value->team1->logo_url ?>"> <img src="http://dailydota2.com/<?php echo $value->team1->logo_url ?>"> это просто показать мне последний результат, как я могу показать все результаты?
  • 0
    внутри foreach поместите эту строку: { echo '<img src="http://dailydota2.com/' . $value->team1->logo_url . '">'; } он покажет все изображения, и вы можете пометить // print_r и т. д ...
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню