2015-08-18 3 views
1

У меня есть JSON как это:PHP разбора 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" поле каждого 3-го.

Так globalID23000002, 23000005, 23000008, 230000011 и т.д. Все, вплоть до и включая 65. А потом мне нужно, чтобы сохранить их в качестве имен переменных, таких как:

$achievement1 для globalID23000002 $achievement2 для globalID23000005

и т.д.

Теперь я предполагаю, что это должно быть d один в петле.

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

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

и было бы

$data['achievementsProgress'], чтобы попасть в список указанного выше JSON.

Как бы я это сделал?

+1

Почему вы хотите, чтобы все эти переменные? Похоже, вы, возможно, делаете вещи более трудными для себя, чем это необходимо. –

+0

nope @ Don'tPanic это необходимо –

ответ

0

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

$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++; 
} 

В этом примере используется complex string syntax создать переменную переменную.

+0

Кажется, я не могу заставить это работать ... Я использовал этот скрипт, а затем попытался «echo $ success1» ;, но он ничего не показывал ... –

+0

Извините, это, вероятно, потому, что я использовал объектную нотацию в ответе. Я пропустил, что вы использовали json_decode с ассоциативным вариантом. –

+0

@ShivamPaw Я обновил ответ, чтобы вместо этого использовать синтаксис массива. –

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

, похоже, не работает btw ... –

+0

$ data ['AchieveProgress'] был назван неправильным. теперь он должен работать – maxpovver

Смежные вопросы