PHP - 解析嵌套的JSON数组值

时间:2017-08-18 03:11:43

标签: php arrays json

我撞墙了,我不确定是什么造成的。我正在解析JSON文件并创建变量。所有未嵌套在数组中的工作都很好。下面这两个不是,我不知道为什么。 $ hail var值显示了冰雹和$ wind var,我完全不知道为什么。

以下是从值中创建变量的代码片段。

     $hail = isset($currFeature['properties']['parameters']['hailSize'][0]);
     $wind = isset($currFeature['properties']['parameters']['windGust'][0]);

以下是它如何输出并显示在它显示的HTML中,但显示两个var的$ hail。

 <div class="alerts-description"> HAZARDS<br /><? if (isset($hail)) {echo $hail . '" Hail';} ?><br /> <? if (isset($wind)) {echo $wind . '" MPH Winds';} ?></div>

数组示例,因为hailSize和windGust都嵌套在参数和[0]

之下
                    [response] => Avoid
                    [parameters] => Array
                        (
                            [hailSize] => Array
                                (
                                    [0] => 0.50
                                )

                            [windGust] => Array
                                (
                                    [0] => 70
                                )

                            [VTEC] => Array
                                (
                                    [0] => /O.NEW.KFWD.FA.W.0008.170813T1318Z-170813T1615Z/
                                )

                            [EAS-ORG] => Array
                                (
                                    [0] => WXR
                                )

有什么建议我做错了或遗失了吗?

编辑:链接到示例代码只需按“运行”按钮“

http://rextester.com/EELE62798

-Thanks!

1 个答案:

答案 0 :(得分:3)

 $hail = isset($currFeature['properties']['parameters']['hailSize'][0]);

以上代码将生成值为truefalse的变量。它永远不会从您的数据中获得价值。

以下PHP7代码是一种可能的解决方案。

<?php

$json = '{"properties":{"parameters":{"hailSize":[0.50],"windGust":[70]}}}';
$currFeature = json_decode($json, true);


$hail = $currFeature['properties']['parameters']['hailSize'][0] ?? null;
$wind = $currFeature['properties']['parameters']['windGust'][0] ?? null;

// check specifically for null 
if ( $hail !== null ) {
    echo $hail . '" Hail'. PHP_EOL;
}
// check specifically for null 
if ( $wind !== null ) {
    echo $wind . '" MPH Winds'. PHP_EOL;
}

if ( empty($currFeature['properties']['parameters']['windGust'][1]) ) {
    echo "empty also works to check for missing data\n";
}

if ( ! isset($currFeature['properties']['parameters']['windGust'][1]) ) {
    echo "isset to check for missing data\n";
}

如果在命令行上运行它,您将获得以下输出:

0.5" Hail
70" MPH Winds
empty also works to check for missing data
isset to check for missing data