2016-05-24 3 views
0

Я уже посмотрел на этот Question and Solution, но это меня не помогло.Сортировка многомерного массива по значению API

Я использую

$champ_data = file_get_contents(); 

, чтобы получить данные от API. Отклик API следующие

{ 
    "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 

Потому что я не могу использовать $ champ_data в любом случае пока я его расшифровать с

$champ_data = json_decode($champ_data); 

впоследствии преобразовать его в массив (по крайней мере, я надеюсь: P)

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

Теперь я пытался уладить это с решениями от других потоков, так что я сделал:

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

Но это даже не сортировка ... Это не имеет значения ASC или DESC.
Я делаю что-то неправильно с конверсиями? Где мои ошибки?
Я только начал программировать, как неделю назад.

Спасибо за все ответы. :)

+0

Хотите, чтобы сортировать по возрастанию или по убыванию? – Thamilan

+0

Вы по-прежнему усложняете процесс сортировки здесь. Можете ли вы просто повторить свой вопрос, произнеся это вслух, а затем спросите себя: «Что я на самом деле спрашиваю здесь?» затем добавьте это. Это похоже на простую проблему, и вы уже пробовали что-то уже хорошее, но это простое решение - просто нужно знать, что это такое –

+0

Спасибо за ответы. Это не имеет значения, восходящий или нисходящий, я бы взял оба. Я просто не знаю, где мои ошибки. Я только начал программировать, как неделю назад. – ThaFlaxx

ответ

4

Просто измените $champ_data на $champ_data['data'] и добавить true в json_decode для декодирования в массив в противном случае вы получите массив объектов.

<?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); 

Для сортировки по убыванию, просто используйте

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

Demo

+0

Ничего себе, похоже, что это «правда», когда json_decode помог. Я должен использовать ['data'] вместо -> $ data, haha. Большое спасибо! – ThaFlaxx

Смежные вопросы