思路:
将所有日期转化成时间戳保存在新数组里面(新数组1和新数组2),
将新数组2排序,
再将新数组2中的元素逐个查找在数组1中的索引,
根据索引将原始数组重新排序,
最终得到排序后的二维数组。
-
// 原始数组 $array = [ [ 'date'=>'2019-2-18', ], [ 'date'=>'2019-2-4', ], [ 'date'=>'2019-2-19', ], [ 'date'=>'2019-2-21', ], [ 'date'=>'2019-2-24', ], ]; var_dump(order_date_array($array, 'desc', 'date')); /* * 将二维数组按日期(支持Ymd和Ynj格式日期)排序 * order_date_array(原始二维数组, desc还是asc, 日期在二维数组中的键) * */ function order_date_array($array, $order, $key){ if (!$array){ return []; }else{ $_array = $array; } if (!$order){ $_order = 'desc'; }else{ $_order = $order; } if (!$key){ // 二维数据中的Ynj日期的键 $_key = 'date'; }else{ $_key = $key; } $new_array = []; $array_1 = []; $array_2 = []; // 日期转时间戳 for ($t=0; $t<count($_array); $t++){ $date = strtotime($_array[$t][$_key]); // Ymd或者Ynj格式日期转时间戳 $array_1[] = $date; $array_2[] = $date; } // 排列方式 if ($_order === 'desc'){ // 降序 rsort($array_2); }else{ // 升序 sort($array_2); } // 重新排序原始数组 for ($r=0; $r<count($array_2); $r++){ $index = array_search($array_2[$r], $array_1); // 元素索引 $new_array[] = $_array[$index]; } return $new_array; }