2015-08-22 4 views
0

У меня есть массив JSON как это:Установка переменных на основе последнего элемента в массиве

"spellsCount": [ 
    { 
     "value": 0, 
     "globalID": 26000000 
    }, 
    { 
     "value": 0, 
     "globalID": 26000001 
    }, 
    { 
     "value": 0, 
     "globalID": 26000002 
    }, 
    { 
     "value": 0, 
     "globalID": 26000003 
    }, 
    { 
     "value": 0, 
     "globalID": 26000005 
    }, 
    { 
     "value": 0, 
     "globalID": 26000009 
    }, 
    { 
     "value": 0, 
     "globalID": 26000011 
    } 
    ], 

Теперь то, что мне нужно сделать, это сделать петлю PHP или что-то, что будет проходить через этот весь массив и сделать переменные со значением 0;

Теперь сложный бит в том, что не все GlobalID s показывают в этом массиве. Например, 26000010 не отображается.

Мне нужно, чтобы переменная, как $spells26000000 = 0; для каждого элемента. ВКЛЮЧАЯ те, которые находятся между ними, но отсутствуют. Таким образом, была бы использована переменная $spells26000010 = 0;, если бы использовался вышеупомянутый массив.

Initally Я это:

for ($i=0; $i < 100; $i+=1){// start at index 0 (1st value) and increment by 1 
    if (isset($data['spellsCount'][$i])) { // just in case there aren't actually 100 
     // Use variable variables to create the $achievement variables you want 
     $globalID = $data['spellsCount'][$i]['globalID']; 
     ${"spells$globalID"} = $data['spellsCount'][$i]['value']; 
    } 
} 

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

Кстати, Я использую json_decode как этот $data = json_decode($jsondata, true);

+0

Подождите ... так что вы пытаетесь сделать? Динамически создавать переменные? Что происходит вместо этого, когда вы пытаетесь это сделать? – Zarathuztra

+0

@ Zarathuztra мой текущий код работает, но он не заполняет пробелы. Например, вы можете видеть, что globalID, заканчивающийся на 10, не находится в массиве, но его нужно сделать переменной. –

ответ

0
<?php 
$data = json_decode(data(), true); 
$spellsCounts = []; 
// make the globalID the index of each respective element 
foreach($data['spellsCount'] as $sc) { 
    $spellsCounts[ $sc['globalID'] ] = $sc; 
} 
// sort the elements by ascending key (i.e. globalID) 
ksort($data); 

// run from first.globalID==min to end.globalID==max 
$min = reset($spellsCounts)['globalID']; // Function array dereferencing has been added in php 5.4 
$max = end($spellsCounts)['globalID']; 
for($i=$min; $i<=$max; $i++) { 
    // ....but this just doesn't sound right 
    // it's just polluting the namespace 
    ${'spells'.$i} = isset($spellsCounts[$i]) ? $spellsCounts[$i]['value'] : 'n/a'; 
} 

// how about using the $spellsCount array 
// and fill it up with the missing values (in case you really need that) ? 
for($i=$min; $i<=$max; $i++) { 
    // ....but this just doesn't sound right 
    if (!isset($spellsCounts[$i])) { 
     $spellsCounts[$i] = [ 
      'globalID' => $i, 
      'value' => 'n/a' 
     ]; 
    } 
} 
var_dump($spellsCounts); 



function data() { 
    return '{"spellsCount": [ 
    { 
     "value": 0, 
     "globalID": 26000000 
    }, 
    { 
     "value": 0, 
     "globalID": 26000001 
    }, 
    { 
     "value": 0, 
     "globalID": 26000002 
    }, 
    { 
     "value": 0, 
     "globalID": 26000003 
    }, 
    { 
     "value": 0, 
     "globalID": 26000005 
    }, 
    { 
     "value": 0, 
     "globalID": 26000009 
    }, 
    { 
     "value": 0, 
     "globalID": 26000011 
    } 
    ]}'; 
} 
+0

кстати: Я думаю, что это проблема XY. Этот ответ должен технически ответить на ваш вопрос, но я действительно сомневаюсь, что он эффективно решает вашу проблему (т. Е. Вы хотите достичь, а не _how_). – VolkerK

+0

Я проверю это и посмотрю, что он делает, и если это сработает. –

+0

спасибо !! сделал некоторые изменения, но он работает: D –

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