У меня такой 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.
Как мне это сделать?
Вот один из способов сделать это. Я думаю, что любой способ, которым вы сможете это сделать, должен включать переменные переменные.
$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++;
}
В этом примере используется сложный строковый синтаксис для создания переменной.
"echo $achievement1";
но это ничего не показывало ...
Лучше сделайте это так:
$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