Foreach L oop JSON получить значение c - PullRequest
0 голосов
/ 17 марта 2020

я сижу перед небольшой проблемой. Сейчас я создаю страницу World of Warcraft, где вы можете отслеживать несколько характеристик в игре.

Я работаю с Blizzard API и хочу получить конкретное значение c из этого json -file . Я подумал, что мог бы реализовать это с помощью foreach l oop, который ищет в дереве «достижений» для идентификатора «13212», проблема в том, что в дереве «достижений» имеется более 2000 пронумерованных строк и ряд, где идентификатор в переменной. Поэтому я не могу сделать это так ..

  foreach($decodeachieve['achievements'][2207]['id'] as $item) {
        if($item == "13212") {
        //show Achievementpicture 
          }
        }

.. потому что строка [2207] не является stati c и может измениться. Поэтому мне нужно искать идентификатор «13212» в каждых 2392 строках «достижений». Как я понимаю это так, как я сделал сейчас? Что мне нужно написать вместо строки [2207], когда я хочу искать в каждой строке. потому что его переменная?

Спасибо за любую помощь. Надеюсь, я объяснил это ясно, мой английский sh не самый лучший.

Некоторые JSON Пример, если ссылка выше не работает:

  "achievements": [
{
  "id": 13212,
  "achievement": {
    "key": {
      "href": "https://us.api.blizzard.com/data/wow/achievement/6?namespace=static-8.3.0_32861-us"
    },
    "name": "Level 10",
    "id": 13212
  },
  "criteria": {
    "id": 2050,
    "is_completed": true
  },
  "completed_timestamp": 1313210612000
},
{
  "id": 7,
  "achievement": {
    "key": {
      "href": "https://us.api.blizzard.com/data/wow/achievement/7?namespace=static-8.3.0_32861-us"
    },
    "name": "Level 20",
    "id": 7
  },
  "criteria": {
    "id": 2683,
    "is_completed": true
  },
  "completed_timestamp": 1313215978000
},

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Хорошо, я получил решение @ Beniamin.

Я изменил ваш код на это (убил "продолжить;" и изменил! == на ==):

        foreach($decodeachieve['achievements'] as $achievement) {
        if ($achievement['id'] == "5266") { // or $achievement['id']['achievement']

        echo "<div class='specialTitles'><img src='https://wow.zamimg.com/images/wow/icons/large/achievement_arena_3v3_7.jpg' style='border-radius: 50%; border: 2px solid #fff; box-shadow: 0px 0px 11px 1px rgba(0,0,0,0.37);'>";
        echo "<div class='document__title'>Dreierbande: 2.400</div></div>";
        }   
}

Это работал для меня.

Спасибо за вашу помощь @ all!

0 голосов
/ 17 марта 2020

Самый простой способ - просто разделить foreach на две части:

    foreach($decodeachieve['achievements'] as $achievement) {
        // first go through all achievements
        foreach ($achievement as $item) {
            //then you should be able to filter items
            if ($item !== "13212") {
                continue;
            }
            // do something
        }
    }

Редактировать: после публикации json все выглядит намного проще:

foreach($decodeachieve['achievements'] as $achievement) {
      if ($achievement['id'] !== "13212") { // or $achievement['id']['achievement']
            continue;
      }
     // do something
}
...