PHP разбор JSON с использованием значения из списка

1

У меня такой json:

"achievementsProgress": [
    {
      "value": 11,
      "globalID": 23000000
    },
    {
      "value": 11,
      "globalID": 23000001
    },
    {
      "value": 11,
      "globalID": 23000002
    },
    {
      "value": 147,
      "globalID": 23000003
    },
    {
      "value": 147,
      "globalID": 23000004
    },
    {
      "value": 147,
      "globalID": 23000005
    },
    .....
]

Это происходит так, и мне нужно уметь читать поле "value" каждого третьего.

Итак, globalID 23000002, 23000005, 23000008, 230000011 и т.д. Все до 65% включительно. И тогда мне нужно сохранить их как имена переменных:

$achievement1 для globalID 23000002 $achievement2 для globalID 23000005

и т.п.

Теперь я предполагаю, что это нужно сделать в цикле.

Пока у меня так много.

$jsondata = file_get_contents($url);
$data = json_decode($jsondata, true)

и это было бы

$data['achievementsProgress'] чтобы перейти к списку вышеупомянутых json.

Как мне это сделать?

  • 1
    Почему вы хотите сделать все эти переменные? Похоже, что вы можете усложнить для себя вещи, чем необходимо.
  • 0
    Нет @ Don'tPanic это необходимо
Теги:

2 ответа

0
Лучший ответ

Вот один из способов сделать это. Я думаю, что любой способ, которым вы сможете это сделать, должен включать переменные переменные.

$x = 1; // start a counter for your variable names
for ($i=2; $i < 65; $i+=3) { // start at index 2 (3rd value) and increment by 3
    if (isset($data['achievementsProgress'][$i])) {  // just in case there aren't actually 65
        // Use variable variables to create the $achievement variables you want
        ${"achievement$x"} = $data['achievementsProgress'][$i]['value'];
    }
    $x++;
}

В этом примере используется сложный строковый синтаксис для создания переменной.

  • 0
    Кажется, я не могу заставить это работать ... Я использовал этот скрипт, а затем попробовал "echo $achievement1"; но это ничего не показывало ...
  • 0
    Извините, это, вероятно, потому что я использовал обозначение объекта в ответе. Я пропустил, что вы использовали json_decode с ассоциативной опцией.
Показать ещё 3 комментария
0

Лучше сделайте это так:

$jsondata = file_get_contents($url);
$data = json_decode($jsondata, true);
$items=$data->achievementsProgress;
$result=[];
$i=1;
foreach($items as $item)
   if($i++%3==0)
       $result[$item->globalID]=$item->value;
//now $result contains map of data you wanted globalid => value

Теперь вы можете получить доступ к нему следующим образом:

$result['23000000'] == 11 and so on
  • 0
    похоже на ошибку в строке foreach.
  • 0
    кажется, не работает, кстати ...
Показать ещё 2 комментария

Ещё вопросы

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