Ausgabe sortieren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
ausgeben
brauche
code
datenstruktur
datum
eintrag
format
http
kurzer ausschnitt
neusten spiele
packen
schleife
sortieren
sortierte array
spiel
stehen
url
zweite brauch
-
Hallo zusammen,
ich möchte auf meiner Website meine zuletzt gespielten Spiele von dem Spiel League of Legends ausgeben. Dazu hole ich mir die Daten aus folgender API:
http://api.captainteemo.com/player/euw/FoDn%20Nono/recent_games
Die letzten Spiele stehen dadrin aber leider nicht sortiert. Ich würde sie aber gerne sortiert ausgeben. Momentan gebe ich die Spiele unsortiert so aus:
$json_file = @file_get_contents('http://api.captainteemo.com/player/euw/FoDn%20Nono/recent_games'); $json_array = json_decode($json_file); for($i = 0; $i < 10; $i++){ $championId = $json_array->data->gameStatistics->array[$i]->championId; print_r("<img src='images/".$championId.".png' width='120' height='120'>"); echo "<hr>"; }
Also da wird erstmal nur das Bild des Champions anhand der ChampionId ausgegeben. Aber wie gesagt, es ist noch unsortiert. Das möchte ich jetzt sortieren. Dafür würde ich sagen, dass das irgendwie mit dem Datum der Spiele funktioniert. Das Format des Datums sieht so aus:
"Apr 12, 2013 7:18:40 AM"
Wie kann ich jetzt am besten die Ausgaben sortieren? Sollen die Daten erst alle in ein Array und soll dann das sortierte Array ausgegeben werden oder wie würdet ihr es machen? Und falls ja, wie kann man das mit diesem Datum Format sortieren?
Liebe Grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ultimate-bravery schrieb:
Das Format des Datums sieht so aus:
"Apr 12, 2013 7:18:40 AM"
Wie kann ich jetzt am besten die Ausgaben sortieren? Sollen die Daten erst alle in ein Array und soll dann das sortierte Array ausgegeben werden oder wie würdet ihr es machen? Und falls ja, wie kann man das mit diesem Datum Format sortieren?
Ich würde es in ein array packen, als array Key verwendest du dann das Datum (vorher umgewandelt in einen unixtimestamp, der praktischer weise ein int ist). Value das was du ausgeben willst. anschließend array sort und erledigt ist es. -
Danke, wie wandle ich denn ein Datum in diesem Format in ein unixtimestamp um?
Ich hab noch ein anderes Problem. Und zwar stehen die Werte, die ich brauche in einem Array, hier ist ein kurzer Ausschnitt:
"statistics": { "array": [ { "statType": "PHYSICAL_DAMAGE_TAKEN", "dataVersion": 0, "value": 9928 }, { "statType": "ASSISTS", "dataVersion": 0, "value": 11 }, { "statType": "MAGIC_DAMAGE_DEALT_TO_CHAMPIONS", "dataVersion": 0, "value": 3138 }, ...
Für mich ist die value jeweils wichtig. Und das nur von ein paar Werten aus dem Bereich "statistics". Also das erste brauch ich z.B. nicht, und das zweite brauch ich. meine Idee war jetzt folgende:
$assists = $json_array->data->gameStatistics->array[$i]->statistics->array[1]->value; print_r($assists);
Allerdings brauche ich auch array[26] und das ist anscheinend nicht bei jedem Spiel gleich. Also bei manchen Spielen fehlt dann z.B. ein Eintrag und dann wäre das, was ich brauche array[25]. Also klappt es so nicht. Wie bekomme ich das hin. Geht das irgendwie so:
gib mir die Value aus dem EIntrag aus dem Array, wo "statType" = "ASSISTS" ist.
Falls ja, wie wäre der Code dazu? Falls nein, wie bekomme ich es sonst hin?
EDIT: Der neue Link zu der API. http://api.captainteemo.com/player/euw/iNono/recent_games
Beitrag zuletzt geändert: 17.4.2013 20:09:12 von ultimate-bravery -
ultimate-bravery schrieb:
Hilft dir das weiter?
…$URL = 'http://api.captainteemo.com/player/euw/iNono/recent_games'; $process = curl_init($URL); curl_setopt($process, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt($process, CURLOPT_TIMEOUT, 3); curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); $response = curl_exec($process); curl_close($process); $data = json_decode($response); $sorted = array(); foreach($data->data->gameStatistics->array as $game) { $time = DateTime::createFromFormat('M n, Y h:i:s A', $game->createDate); $sorted[$time->format('U')] = $game; } ksort($sorted); foreach($sorted as $game) { echo("{$game->createDate}: "); foreach($game->statistics->array as $entry) if($entry->statType == 'ASSISTS') echo("{$entry->value} assists, "); echo("<img src='images/{$game->championId}.png' width='120' height='120'><hr>\n"); }
Beitrag zuletzt geändert: 17.4.2013 21:22:15 von hackyourlife -
ultimate-bravery schrieb:
gib mir die Value aus dem EIntrag aus dem Array, wo "statType" = "ASSISTS" ist.
Falls ja, wie wäre der Code dazu? Falls nein, wie bekomme ich es sonst hin?
dafür machst eine schleife über den äußeren array und gibst den value zurück falls "statType" = "ASSISTS" ist. foreach dürfte dir dabei helfen http://php.net/manual/de/control-structures.foreach.php
also etwas in die Richtung, musst auf deine Datenstruktur anpassen
foreach ($json_array->data->gameStatistics as $v) { if ($v ->statistics->array["statType"] == "ASSISTS") echo $v ->statistics->array["value"]; }
-
@hackyourlife: Wow, vielen Dank! Klappt soweit ganz gut. Kann man die Reihenfolge noch ändern? Also genau andersherum? Die neusten Spiele sollen ganz oben stehen.
EDIT: Habs schon geschafft, hab anstatt ksort krsort genommen. Danke nochmal!!
Beitrag zuletzt geändert: 17.4.2013 21:41:28 von ultimate-bravery -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage