在没有键/值对的情况下在PHP中更改JSON的顺序

时间:2015-12-10 09:10:53

标签: php json

我有一种情况需要按日期对JSON对象进行排序。我在网上搜索了解决方案,所有内容都指向PHP usort函数的方向,但all examples有一个键/值对要排序。

这是我加载Feed的方式:

$ret = file_get_contents($url);
$res = json_encode($ret);

导致以下JSON

{  
   "2015-12-14":{  
      "direction":"S",
      "snowfall":0.0,
      [..]
  },
   "2015-12-15":{  
      "direction":"S",
      "snowfall":3.0,
      [..]
   },
   "2015-12-12":{  
      "direction":"SE",
      "snowfall":0.0,
      [..]
   },
   "2015-12-13":{  
      "direction":"S",
      "snowfall":0.0,
      [..]
   },
   "2015-12-10":{  
      "direction":"E",
      "snowfall":0.0,
      [..]
   },
   "2015-12-11":{  
      "direction":"S",
      "snowfall":0.0,
      [..]
   }
}

如您所见,数据未按日期排序,但日期值是关键,因此我如何按日期对对象进行排序(2015-12-10,2015-12-11,2015-12- 12,2015-12-13,2015-12-12,2015-12-15)?

3 个答案:

答案 0 :(得分:1)

只需在对数据进行编码之前对数据进行排序,例如ksort

$ret = file_get_contents($url);
ksort($ret);
$res = json_encode($ret);

这样,$ret似乎返回的数组将按键(日期)排序,然后按照排序顺序进行编码。

答案 1 :(得分:0)

您可以使用ksort,它可以按键对数组进行排序。

您也可以使用排序标记,这些标记已有详细描述here

答案 2 :(得分:0)

$json = '{  
   "2015-12-14":{  

      "direction":"S",

      "snowfall":0.0

  },

   "2015-12-15":{  

      "direction":"S",

      "snowfall":3.0

   },

   "2015-12-12":{  

      "direction":"SE",

      "snowfall":0.0

   },

   "2015-12-13":{  

      "direction":"S",

      "snowfall":0.0

   },

   "2015-12-10":{  

      "direction":"E",

      "snowfall":0.0

   },

   "2015-12-11":{  

      "direction":"S",

      "snowfall":0.0

   }

}';

$array = get_object_vars(json_decode($json));

ksort($array);

echo json_encode((object)$array);