我有一个像这样的多维数组(每个$orders[$userid]数组有多个订单数组)
foreach($orders[$userid] as $order){
print_r($order);
}
这是第一个用户的订单按日期,月,年分组
Array ( [id] => 409079 [user_id] => 26017 [total] => 30 [final_total] => 29.1 [order_status_id] => 1
[day] => 1 [month] => 11 [year] => 2016 [amount2] => 2198.2999696731567 )
Array ( [id] => 410744 [user_id] => 26017 [total] => 175 [final_total] => 165 [order_status_id] => 1
[day] => 2 [month] => 11 [year] => 2016 [amount2] => 2619.799982070923 )
Array ( [id] => 412268 [user_id] => 26017 [total] => 300 [final_total] => 293 [order_status_id] => 1
[day] => 3 [month] => 11 [year] => 2016 [amount2] => 4413.400000572205 )
Array ( [id] => 405860 [user_id] => 26017 [total] => 10 [final_total] => 9.8 [order_status_id] => 1
[day] => 30 [month] => 10 [year] => 2016 [amount2] => 352.5999994277954 )
Array ( [id] => 407500 [user_id] => 26017 [total] => 85 [final_total] => 84.5 [order_status_id] => 1
[day] => 31 [month] => 10 [year] => 2016 [amount2] => 1135.1000022888184 )
如您所见,较旧的日期显示在最近日期之后。问题是如何排序这个多维数组以显示旧日期然后显示最近日期,如
Array ( [id] => 405860 [user_id] => 26017 [total] => 10 [final_total] => 9.8 [order_status_id] => 1
[day] => 30 [month] => 10 [year] => 2016 [amount2] => 352.5999994277954 )
Array ( [id] => 407500 [user_id] => 26017 [total] => 85 [final_total] => 84.5 [order_status_id] => 1
[day] => 31 [month] => 10 [year] => 2016 [amount2] => 1135.1000022888184 )
Array ( [id] => 409079 [user_id] => 26017 [total] => 30 [final_total] => 29.1 [order_status_id] => 1
[day] => 1 [month] => 11 [year] => 2016 [amount2] => 2198.2999696731567 )
Array ( [id] => 410744 [user_id] => 26017 [total] => 175 [final_total] => 165 [order_status_id] => 1
[day] => 2 [month] => 11 [year] => 2016 [amount2] => 2619.799982070923 )
Array ( [id] => 412268 [user_id] => 26017 [total] => 300 [final_total] => 293 [order_status_id] => 1
[day] => 3 [month] => 11 [year] => 2016 [amount2] => 4413.400000572205 )
请使用代码:
foreach ($orders as $key => $row) {
$year[$key] = $row['year'];
$month[$key] = $row['month'];
$day[$key] = $row['day'];
}
array_multisort($year, SORT_ASC, $month, SORT_ASC, $day, SORT_ASC, $orders);
而在更复杂的情况下,您将使用array_multisort
,在这种情况下,您可以将问题简化为仅按一个值排序。的'year'
、'month'
和'day'
基本上是日期的部分。使用usort
函数,您可以执行以下操作:
$dateToTimestamp = function (array $order) {
$day = $order['day'];
$month = $order['month'];
$year = $order['year'];
return strtotime("$day-$month-$year");
};
usort($array, function ($a, $b) use ($dateToTimestamp) {
return $dateToTimestamp($a) - $dateToTimestamp($b);
});
使用strtotime
需要注意的一点是,您不能真正设置区域设置以识别字符串的哪一部分是日、月或年。在PHP的一个手动注释中,有一个技巧来弥补这一点。在我们的例子中,破折号分隔符的使用确保了顺序。