kostenloser Webspace werbefrei: lima-city


Ausgabe sortieren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    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
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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
  6. 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"];
    }
  7. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    @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
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!