按月对PHP JSON数组进行排序

时间:2016-07-01 05:47:53

标签: php arrays json

我试图按MONTH名称缩短数组。

[  
   {  
      "order_id":29,
      "user_id":1,
      "sum":20000,
      "month":"April"
   },
   {  
      "order_id":34,
      "user_id":17,
      "sum":65000,
      "month":"May"
   },
   {  
      "order_id":32,
      "user_id":19,
      "sum":15000,
      "month":"July"
   }
]

有什么方法可以快速排序吗?我需要名字格式的月份。

我期待的结果如下。

arsort

我尝试了krsortarray_reverse()Process.Start("C:\\Users\\Administrator\\Desktop\\http_IE8.exe"); or Process process=Runtime.getRuntime.exec("file path of exe or .bat files"); ,但这些方法无法缩短它们。所以寻找其他解决方案。

谢谢! (提前)

3 个答案:

答案 0 :(得分:3)

直接在这里不能应用任何函数,因为你的数据是json格式的,你可以像下面这样实现: -

$json = <<<JSON
[  
   {  
      "order_id":34,
      "user_id":17,
      "sum":65000,
      "month":"May"
   },
   {  
      "order_id":32,
      "user_id":19,
      "sum":15000,
      "month":"July"
   },
   {  
      "order_id":29,
      "user_id":1,
      "sum":20000,
      "month":"April"
   },
   {  
      "order_id":29,
      "user_id":1,
      "sum":20000,
      "month":"January"
   }
]
JSON;
$arr = json_decode($json, true);
$months = [
    'January' => 1,
    'Feburary' => 2,
    'March' => 3,
    'April' => 4,
    'May' => 5,
    'June' => 6,
    'July' => 7,
    'August' => 8,
    'September' => 9,
    'October' => 10,
    'November' => 11,
    'December' => 12
];
usort($arr, function ($x, $y) use($months) {
    return $months[$x['month']] - $months[$y['month']];
});
$json = json_encode($arr);

输出: - https://eval.in/598786

参考文献: -

PHP re-order array of month names

答案 1 :(得分:2)

假设您已将JSON解码为二维数组,您可以尝试使用usort和回调函数来比较您的月份名称

$json_data = '[  
 {  
  "order_id":34,
  "user_id":17,
  "sum":65000,
  "month":"May"
 },
 {  
   "order_id":32,
   "user_id":19,
   "sum":15000,
   "month":"July"
 },
 {  
  "order_id":29,
  "user_id":1,
  "sum":20000,
  "month":"April"
 }
]';

function cmp_by_month($a, $b)
{
  //Let's compare by month value
  return strtotime($a["month"]) - strtotime($b["month"]);
}

$data = json_decode($json_data);
$result = usort($data, 'cmp_by_month');

答案 2 :(得分:1)

  • 您需要使用test.png将JSON转换为数组。 如果要将数组转换为JSON,则可以在转换之前执行这些操作。

  • 创建一个月数组。

  • 使用json_decode方法在usort
  • 的帮助下对数组进行排序
  • 使用$months将您的数组转换回JSON。

<强> CODE

json_encode