2017-03-27 4 views
1

Ich versuche, die folgende JSON-Antwort auf HTML mit PHP zu echo.JSON zu PHP-Ausgabe

Dies ist die JSON-Antwort:

{ 
    "data": { 
    "onward": [ 
     { 
     "origin": "LHR", 
     "id": "SB15", 
     "rating": 0, 
     "destination": "FKK", 
     "PricingSolution": { 
      "TotalPrice": "USD445" 
     }, 
     "Class": "Eco" 
     }, 
     { 
     "origin": "LHR", 
     "id": "EH10", 
     "rating": 0, 
     "destination": "FKK", 
     "PricingSolution": { 
      "TotalPrice": "USD223" 
     }, 
     "Class": "Eco" 
     } 
    ] 
    } 
} 

Dies ist, wie es in HTML angezeigt werden soll:

<body> 
<ul class="myclass"> 
<li>ID: EH10, Price: 223, Class: Eco</li> 
<li>ID: SB15, Price: 445, Class: Eco</li> 
</ul> 
</body> 

Ich will es irgendwie werden sortiert nach Gesamtpreis in aufsteigender Reihenfolge.

Versuchte

foreach($json['data'] as $data). 

scheinen nicht zu funktionieren werden! Bitte helfen Sie.

+0

Versuchen 'json_decode()': http://php.net/manual/en/ function.json-decode.php – JustBaron

+0

Das Array, das Sie durchlaufen möchten, befindet sich nicht in '$ json ['data']' - es befindet sich in '$ json ['data'] ['onward']' – Tom

+0

Doesn ' Es scheint zu funktionieren! Was funktioniert nicht, wie sieht Ihre Ausgabe aus? Erhalten Sie einen Fehler oder eine Warnung? –

Antwort

1

ich den Code ausgeführt haben und es funktioniert groß.

prüfen diese

<?php 

$jsonString = '{ 
"data": { 
"onward": [ 
{ 
"origin": "LHR", 
"id": "SB15", 
"rating": 0, 
"destination": "FKK", 
"PricingSolution":{ 
"TotalPrice": "USD442" 
}, 
"Class": "Eco" 
}, 
{ 
"origin": "LHR", 
"id": "SB15", 
"rating": 0, 
"destination": "FKK", 
"PricingSolution":{ 
"TotalPrice": "USD445" 
}, 
"Class": "Eco" 
}, 

{ 
"origin": "LHR", 
"id": "EH10", 
"rating": 0, 
"destination": "FKK", 
"PricingSolution":{ 
"TotalPrice": "USD223" 
}, 
"Class": "Eco" 
} 
] 
} 
}'; 

$json = json_decode($jsonString, true); 

$items = $json['data']['onward']; 

usort($items, function ($a, $b) { 
    return (extractPrice($a['PricingSolution']['TotalPrice']) - extractPrice($b['PricingSolution']['TotalPrice'])); 
}); 

function extractPrice($price) 
{ 
    return str_replace('USD', '', $price); 
} 

$finalItems = []; // Duplicate ids handling 
foreach ($items as $item) { 
    if (empty($finalItems[$item['id']]) || extractPrice($finalItems[$item['id']]['PricingSolution']['TotalPrice']) > extractPrice($item['PricingSolution']['TotalPrice'])) { 
     $finalItems[$item['id']] = $item; 
    } 
} 

?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<ul class="myclass"> 
    <?php foreach ($finalItems as $item) { ?> 
     <li>ID: <?= $item['id']; ?>, Price: <?= $item['PricingSolution']['TotalPrice']; ?>, 
      Class: <?= $item['Class']; ?></li> 
    <?php } ?> 
</ul> 
</body> 
</html> 

Wenn Sie das Sortieren tun wollen, dann lesen Sie in diesem Link

How can I sort arrays and data in PHP?

+0

Das gleiche für mich außer für eine Schleife am Ende und ich erwarte Ergebnis. Koffer geschlossen, wenn Sie mich fragen –

+0

@AmanRawat Funktioniert super! Vielen Dank. Nur, wenn Sie mir mit dem Sortieren von etwas mit einfachem Code helfen könnten? Ich bin nur ein Anfänger. Und können wir trotzdem irgendeine Zahl von TotalPrice abziehen? Wie Gesamtpreis - 50? – Muyi

+0

Im Gesamtpreis 'USD' ist am Anfang, also entfernen Sie diesen USD und subtrahieren Sie dann. Wie folgt

0

Verwendung json_decode Ihre json in einen PHP-Array (mit dem zweiten Parameter als wahr, so dass es als assoziatives Array gegossen wird) zu transformieren

PHP manual for json_decode

Dann können Sie die Array-Schleife.

$array=json_decode($json,true); 
foreach($array as $key=>$value){ 
    //do your magic 
} 

Ich habe diese Geige lief

<?php 
$json=json_decode ('{ 
"data": { 
"onward": [ 
{ 
"origin": "LHR", 
"id": "SB15", 
"rating": 0, 
"destination": "FKK", 
"PricingSolution":{ 
"TotalPrice": "USD445" 
}, 
"Class": "Eco" 
}, 

{ 
"origin": "LHR", 
"id": "EH10", 
"rating": 0, 
"destination": "FKK", 
"PricingSolution":{ 
"TotalPrice": "USD223" 
}, 
"Class": "Eco" 
} 
] 
} 
}',true); 

echo "<pre>"; 
foreach($json['data']['onward'] as $k=>$v){ 
echo "ID :" .$v['id']; 
} 
echo "</pre>"; 
?> 

und bekam Ausgang erwartet:

ID: SB15ID: EH10

+0

$ json = json_decode ($ antwort, wahr); $ output = ""; foreach ($ json ['data'] ['weiter'] als $ data) {$ output. = "ID:". $ data ['Herkunft']; } echo $ ausgabe; Ausgabe ist ein leerer Bildschirm! – Muyi

+0

gut überprüfen Sie Ihr Fehlerprotokoll und sehen, was passiert ist, ich meine, das ist grundlegende Sachen. Du wirst es herausfinden. Ich lief eine PHP-Geige und ich bekomme die erwartete ID –