2016-01-21 4 views
0

Надеюсь, некоторые из них могут помочь мне выяснить следующее вопрос ..Как обрабатывать PHP массив с выходом JSON

я выполняю следующий запрос:

$key = "privatehashere"; 
$query = file_get_contents("https://privateurlhere/?key_id=" . $key . "&paramshere"); 

Согласно официальной документации, я знаю, что вывод является JSON , который закодирован. Так что я его расшифровать и преобразовать в PHP массив:

$result = json_decode($query, true); 

В этот момент, когда я показываю выход с <pre> теге и print_r функции, я получаю:

Array 
(
    [status] => ok 
    [data] => Array 
     (
      [grp] => Array 
       (
        [0] => Array 
         (
          [number] => 24384 
          [desc] => ENTITY-2 
         ) 

        [1] => Array 
         (
          [number] => 46590 
          [desc] => ENTITY-1 
         ) 

       ) 

     ) 

) 

Что мне нужно , заключается в сохранении конечных значений в переменных, поэтому я могу работать с ними дальше. Таким образом, результат должен быть идеально:

$number_0 = "24384" 
$desc_0 = "ENTITY-2" 
$number_1 = "46590" 
$desc_1 = "ENTITY-1" 

Спасибо за любые предложения/подсказки.

+0

Вы можете поделиться тем, что вы пробовали? –

+1

Эти переменные вряд ли можно назвать «идеальными» –

+1

Зачем ставить их в скалярные переменные? Они находятся в массиве, оставляя их там, и используют значения, обращаясь к массиву, то есть 'if ($ result ['status'] == 'ok') {' Если вы дадите переменной '$ result' более содержательное имя, оно будет beome самостоятельно документирование! – RiggsFolly

ответ

2

Попробуйте

foreach($result['data']['grp'] as $item) 
{ 
    echo 'Number '.$item['number']; 
    echo '<br/>desc '.$item['desc']; 
} 

Вы также можете хранить их непосредственно в переменные.

$number_0 = $result['data']['grp'][0]['number']; 
$desc_0 = $result['data']['grp'][0]['desc']; 
$number_1 = $result['data']['grp'][1]['number']; 
$desc_1 = $result['data']['grp'][1]['desc']; 

Примечание: В PHP Вы не можете начинать имя переменной с числовыми. как вы делали здесь $0_number

+1

Зачем OP« попробуйте это »?*** Хороший ответ *** всегда будет объяснять, что было сделано, и почему это было сделано именно так, не только для OP, но и для будущих посетителей SO. –

+0

Спасибо за примечание об имени переменной. Я новичок в PHP, и я об этом не думал. –

2

Я не говорю, что этот метод хорошая практика, это тем не менее прямой ответ на ваш вопрос:

$number_0 = $result['data']['grp'][0]['number']; 
$desc_0 = $result['data']['grp'][0]['desc']; 
$number_1 = $result['data']['grp'][1]['number']; 
$desc_1 = $result['data']['grp'][1]['desc']; 

Если вы хотите, чтобы динамически назначать переменные из массива, вы можете сделайте это так:

foreach($result['data']['grp'] as $k => $v) 
{ 
    ${'number_'.$k} = $v['number']; 
    ${'desc_'.$k} = $v['desc']; 
} 
+0

У вас есть ошибка SYNTAX в приведенном выше коде. – Hassaan

+0

@JayBlanchard 'Ошибка паролей PHP: ошибка синтаксиса, неожиданный '0' (T_LNUMBER), ожидающая переменная (T_VARIABLE) или '$'', переменная php не может начинаться с числа –

+0

Спасибо. Полагаю, я хотел быть слишком быстрым. Обновлено. – Rein

0

похоже, что вы извлекли свой массив. теперь формирует требуемые переменные. вы не можете инициировать свою переменную с числовым значением. вместо этого мы формируем его следующим образом: $subKey_mainKey например. $number_0;

$getDetails[0] = array("number"=>24384, "desc"=>"ENTITY-2"); 
$getDetails[1] = array("number"=>46590, "desc"=>"ENTITY-1"); 
foreach($getDetails as $indKey=>$indArray) { 
    foreach($indArray as $indNKey=>$indNVal) { 
     $createVar = $indNKey."_".$indKey; 
     $$createVar = $indNVal; 
    } 
} 
echo $number_0; 
+0

Это не совсем то, что я искал, но большое спасибо за имена переменных. Как я уже упоминал выше, я начинаю работать на PHP, и я об этом не думал. –

+0

согласно моему пониманию, я ответил на все свои вопросы. поэтому, если вы сообщите мне еще немного о своем требовании, мне было бы полезно дать вам лучшее решение. Спасибо и ура. – ameenulla0007