按月对PHP JSON数组排序

按月对PHP JSON数组排序,php,arrays,json,Php,Arrays,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":

我正在尝试按月份名称缩短数组

[  
   {  
      "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":"April"
   },
   {  
      "order_id":34,
      "user_id":17,
      "sum":65000,
      "month":"May"
   },
   {  
      "order_id":32,
      "user_id":19,
      "sum":15000,
      "month":"July"
   }
]
我尝试过
arsort
krsort
array\u reverse()
,但这些方法无法缩短它们。因此,我们正在寻找其他解决方案

谢谢大家!!(提前)

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

  • 创建一个月数组

  • $months
    的帮助下,使用
    usort
    方法对数组进行排序
  • 使用
    JSON\u encode
    将数组转换回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);
$json=3,
“四月”=>4,
“五月”=>5日,
“六月”=>6日,
“7月”=>7日,
“八月”=>8日,
“9月”=>9日,
“十月”=>10,
“11月”=>11日,
“12月”=>12日
];
usort($arr,函数($x,$y)使用($月){
返回$months[$x['month']-$months[$y['month']];
});
$json=json_encode($arr);

由于您的数据为json格式,因此此处无法直接应用任何函数,您可以按如下方式实现:-

<?php

$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"
   }
]';

$new_array = json_decode($data,true); // convert json to php array
echo "<pre/>";print_r($new_array); // print original array

usort($new_array, "compare_months"); // using usort with callback function
var_dump($new_array); // your final sorted array

function compare_months($a, $b) {
    $monthA = date_parse($a['month']);
    $monthB = date_parse($b['month']);

    return $monthA["month"] - $monthB["month"];
}
?>

输出:-

参考文献:-


假设您已经将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');

你想按月份排序(一月-二月-三月…)还是按月份名称排序(四月-八月-二月…)我想按一月-二月-三月排序…我想反向数组在这里可以工作?不,反向数组()在这里不工作。是的,它是json格式,所以先将其转换为普通PHP数组,不?是的,这也是一种方法。我喜欢你分类的方式。我使用相同的usort。并帮助我解决了没有任何问题。感谢您更新更多的一步一步指南。我相信将来很多人也会从中吸取教训。:)非常简短和甜蜜:)很好地使用了
strotime