2016-05-24 16 views
0

Ich habe schon einen Blick auf diese Question and Solution, aber das hat mir nicht geholfen.Sortieren mehrdimensionale Array nach Wert von API

Ich bin mit

$champ_data = file_get_contents(); 

die Daten aus einer API zu erhalten. Die API-Antwort die folgenden

{ 
    "data": { 
     "Aatrox": { 
     "id": 266, 
     "title": "the Darkin Blade", 
     "name": "Aatrox", 
     "key": "Aatrox" 
     }, 
     "Thresh": { 
     "id": 412, 
     "title": "the Chain Warden", 
     "name": "Thresh", 
     "key": "Thresh" 
     } 
    } 
}  //this is not all of the data, it contains more than 100 ids 

Weil ich noch nicht $ champ_data in irgendeiner Weise verwenden, kann ich entschlüsseln mit

$champ_data = json_decode($champ_data); 

Danach in ein Array umwandeln (hoffe ich zumindest so: P)

$data = 'data'; 
$champ_data = print_r(get_object_vars($champ_data->$data)); 

Nun versuche ich es mit den Lösungen aus dem anderen Thread zu sortieren, so dass ich tat:

usort($champ_data, function($a, $b) { 
    return $a['id'] - $b['id']; 
}); 

Aber es ist nicht einmal sortieren ... Es ist egal ASC oder DESC.
Mache ich etwas falsch mit den Konvertierungen? Wo sind meine Fehler?
Ich habe gerade angefangen zu programmieren wie vor einer Woche.

Danke für alle Antworten. :)

+0

Wollen Sie nach aufsteigend oder absteigend sortiert werden? – Thamilan

+0

Sie sind hier über komplizieren den Sortierprozess. Kannst du deine Frage noch einmal durchlesen, es laut aussprechen und dich dann fragen: "Was frage ich eigentlich hier?" dann füge das hinzu. Es sieht wie ein einfaches Problem aus und Sie haben bereits etwas versucht, was gut ist, aber es ist auch eine einfache Lösung - müssen Sie nur wissen, was es ist –

+0

Danke für die Antworten. Es spielt keine Rolle, aufsteigend oder absteigend, ich würde beides nehmen. Ich weiß einfach nicht, wo meine Fehler sind. Ich habe gerade erst vor einer Woche angefangen zu programmieren. – ThaFlaxx

Antwort

4

Nur $champ_data-$champ_data['data'] ändern und fügen Sie true zu json_decode zu Array dekodieren sonst werden Sie Objektarray erhalten.

<?php 

$champ_data = '{ 
    "data": { 
     "Aatrox": { 
     "id": 266, 
     "title": "the Darkin Blade", 
     "name": "Aatrox", 
     "key": "Aatrox" 
     }, 
     "Thresh": { 
     "id": 412, 
     "title": "the Chain Warden", 
     "name": "Thresh", 
     "key": "Thresh" 
     } 
    } 
}'; 

$champ_data = json_decode($champ_data, true); 

echo "<pre>"; 

print_r($champ_data['data']); 

usort($champ_data['data'], function($a, $b) { 
    return $a['id'] - $b['id']; 
}); 

print_r($champ_data); 

Für absteigend sortieren, benutzen Sie einfach

return $b['id'] - $a['id']; 

Demo

+0

Wow, es sieht aus wie das "wahre" ind der json_decode geholfen hat. Ich sollte ['data'] anstelle von -> $ data verwenden, haha. Vielen Dank! – ThaFlaxx

Verwandte Themen