【问题标题】:How to process PHP Array with JSON output如何使用 JSON 输出处理 PHP 数组
【发布时间】:2016-01-21 13:34:42
【问题描述】:

希望有人能帮我解决以下问题..

我执行以下查询:

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

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

【问题讨论】:

  • 你能分享你的尝试吗?
  • 这些变量很难称得上“理想”
  • 为什么要把它们放在标量变量中?它们在一个数组中,将它们留在那里并通过寻址数组来使用值,即if ( $result['status'] == 'ok' ){ 如果你给变量$result 一个更有意义的名称,它将成为自我记录!
  • @GeraldSchneider 我的错。其他人已经告诉我他们有什么问题。无论如何,下次尝试更具体;-)
  • 我在哪里说你应该修改任何东西。执行json_decode() 后,您将拥有一个完全属于您的数组。去处理,去爱和珍惜,修正或不修正。将其全部复制到新的标量变量中只会使您的内存需求加倍并增加您的运行时间。如果您更喜欢使用对象,请将,truejson_decode() 分开,我敢打赌您会得到一个很好的对象来处理

标签: php arrays json loops variables


【解决方案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

【讨论】:

  • 为什么 OP 应该“试试这个”? 好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,也适用于 SO 的未来访问者。
  • 感谢关于变量名的注释。我是 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'];
}

【讨论】:

  • @JayBlanchard PHP Parse error: syntax error, unexpected '0' (T_LNUMBER), expecting variable (T_VARIABLE) or '$',php 变量不能以数字开头
  • 谢谢。猜猜我想有点太快了。更新了。
  • @JayBlanchard 正如我的回答中提到的,我认为这不是最佳做法。我只是想尽可能地回答 OP 的问题。有很多方法可以从数组中获取数据,还有更多方法可以存储检索到的数据。不过,感谢您的建议。
【解决方案3】:

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

【讨论】:

  • 这不是我想要的,但非常感谢变量名。正如我上面提到的,我是 PHP 的初学者,我没有考虑过这个。
  • 据我了解,我回答得最好。因此,如果您向我简要介绍一下您的要求,我将为您提供最佳解决方案会有所帮助。谢谢和欢呼。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多