按API从值排序多维数组

时间:2016-05-24 00:49:44

标签: php arrays sorting multidimensional-array

我已经看过这个Question and Solution,但这对我没有帮助。

我正在使用

$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无关 我在转换时做错了吗?我的错误在哪里?
我刚刚开始编程,就像一周前一样。

感谢所有答案。 :)

1 个答案:

答案 0 :(得分: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