2017-08-18 2 views
-2

Ich habe eine Wand getroffen und ich bin mir nicht sicher, was das verursacht. Ich analysiere eine JSON-Datei und erstelle Variablen. Alle, die nicht in Arrays verschachtelt sind, funktionieren großartig. Diese zwei unten sind jedoch nicht und ich bin mir nicht sicher warum. $ hail var Wert zeigt sowohl für den Hagel als auch für die $ wind var und ich bin völlig verwirrt, warum.PHP - Parsing geschachtelte JSON-Array-Werte

Hier ist ein Ausschnitt des Codes, um die Variable aus dem Wert zu erstellen.

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

Hier ist, wie es ausgegeben wird und in dem HTML angezeigt, die es zeigt aber zeigt $ Hagel für beide var.

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

Beispiel für Array sowohl als hailSize und Windböen unter Parameter verschachtelt und beide [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 
           ) 

Irgendwelche Vorschläge, was ich falsch mache oder fehle?

EDIT: Link zum Beispiel Code einfach auf den "Run it" Button“

http://rextester.com/EELE62798

-Danke

+0

Welche Version von PHP verwenden Sie? – ryantxr

+0

Was ist Ihre Ausgabe für $ Hagel und $ Wind? In Anbetracht der Tatsache, dass Sie 'isset()' in der Variablenzuweisung verwenden (zusätzlich zur Bedingung), sollten Sie nur eine 'true/false'-Ausgabe von Ihrem' echo $ hail' und 'echo $ wind' erhalten. –

+0

PHP 7 @OsbsidianAge das ist ein sehr guter Punkt und fangen, die zu dieser Frage von früher aus genau diesem Grund führen. https://stackoverflow.com/questions/45743860/php-isset-vs-empty?noredirect=1#comment78453243_45743860 – Texan78

Antwort

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

Der obige Code eine Variable mit dem Wert generieren true oder false Es wird nie den Wert von Ihren Daten haben

Der folgende PHP7-Code ist eine mögliche Lösung .

<?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"; 
} 

Wenn Sie es auf der Kommandozeile ausgeführt werden Sie die folgende Ausgabe:

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

Danke, das isset() stammt von dieser Frage, die ich früher hatte, um ein anderes Problem anzugehen. https://stackoverflow.com/questions/45743860/php-isset-vs-empty?noredirect=1#comment78453243_45743860, dass der Schlüssel ['hailSize'] oder ['windGust'] nicht immer in JSON ausgegeben wird. Also brauchte ich etwas, um dieses Problem anzugehen, wenn es nicht ausgegeben wird, um zu verhindern, dass der Fehler "undefined" ausgelöst wird, wenn er nicht in der JSON-Datei enthalten ist. Als ich das gemacht habe, habe ich jetzt dieses Problem. – Texan78

+0

Sie können ??, isetet, empty und array_key_exists verwenden, um das Vorhandensein der Daten zu überprüfen. – ryantxr

+0

Genau das, was ich dachte, war die Lösung. Das Setzen von 'isset()' auf die Variablenzuweisung ergab keinen Sinn. Dies ist definitiv die Art und Weise, dass ich empfehlen würde, darüber zu gehen =] –