如何处理PHP数组与JSON输出

问题描述:

希望一些可以帮助我弄清楚以下问题..如何处理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

尝试

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初学者,我没有想到这一点。 –

我并不是说这种方法是很好的做法,但它是一个直接回答你的问题:

$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

好像你检索你的数组。 现在形成你所需的变量。 您无法使用数字值启动您的变量。相反,我们形成它像这样$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