如何使用PHP对多维(json)数组进行排序

时间:2011-07-13 00:09:10

标签: php json sorting

有人可以帮助我吗...我已经读过以前的PHP'排序'问题......并尝试遵循逻辑......但是大脑褪色占上风; - !

我有一个json对象(来自facebook),我试图使用以下代码之一使用其中一个值('created_time')进行排序:

$json = file_get_contents($url,0,null,null);
$result = json_decode($json, true);
array_multisort($note['created_time'], SORT_ASC, $result);   /* what's wrong with this line?? */

示例json数据如下所示:

{
   "data": [
      {
         "id": "123",
         "from": {
            "name": "Example",
            "category": "Musician/band",
            "id": "123"
         },
         "subject": "Subject 1",
         "message": "Example message text 1",
         "created_time": "2011-07-12T20:18:17+0000",
      },
      {
         "id": "123",
         "from": {
            "name": "Example",
            "category": "Musician/band",
            "id": "123"
         },
         "subject": "Subject 2",
         "message": "Example message text 2",
         "created_time": "2011-07-12T20:21:01+0000",
      },
...

谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

你的PHP片段引用了$ note对象,但我只看到了$ json和$ result变量......

假设我们有数据数组可用,你可以使用自定义函数的usort ..如果你使用PHP 5.3 +

这可能是一个匿名函数
function sort_by_creation($a, $b) 
{
  return (strtotime($a['created_time']) < strtotime($b['created_time']) ? -1 : 1;
}
usort($data, 'sort_by_creation');

答案 1 :(得分:0)

我不确定这是否有效。 $ note来自哪里?如果您尝试按特定成员对数组进行排序,那么usort呢? http://php.net/manual/en/function.usort.php

如下所示:

function sortByCreatedTime($a, $b){
  if ($strtotime($a['data']['created_time']) == strtotime($b['data']['created_time'])) {
    return 0;
  };
  return ($strtotime($a['data']['created_time']) < strtotime($b['data']['created_time'])) ? -1 : 1;
};
usort($result, sortByCreatedTime);
for($i = 0; $i < count($results['data']); $i++){
  //should output in descending order.  if not just change 
  //the < to a > in the sort function above
  echo 'time is => ' . $results['data']['created_time'] . '<br>';
};