如何使用 JSON 输出处理 PHP 数组


How to process PHP Array with JSON output

希望有些人可以帮助我找出以下问题。

我执行以下查询:

$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"

感谢您的任何建议/提示。

尝试

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在这里所做的那样以数字开头变量名

我并不是说这种方法是好的做法,但它是对您的问题的直接回答:

$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'];
}
似乎

您检索到了数组。现在形成所需的变量。不能使用数值启动变量。相反,我们像这样形成它$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;