PHP按数组键的值排序
我正在创建一个数组,其中包含一个日期:PHP按数组键的值排序,php,Php,我正在创建一个数组,其中包含一个日期: $arr = array(); $arr["one"][] = array( 'due' => '17-01-2021 10:00:00', ); $arr["one"][] = array( 'due' => '17-01-2021 09:00:00', ); $arr["two"][] = array( 'due' => '19-01-2021 09:
$arr = array();
$arr["one"][] = array(
'due' => '17-01-2021 10:00:00',
);
$arr["one"][] = array(
'due' => '17-01-2021 09:00:00',
);
$arr["two"][] = array(
'due' => '19-01-2021 09:00:00',
);
$arr["two"][] = array(
'due' => '18-01-2021 09:00:00',
);
我想按“到期”键的值排序
我尝试添加此uasort函数:
uasort($arr, function ($a, $b) {
return $a["due"] <=> $b["due"];
});
print_r($arr);
uasort($arr,function($a,$b){
返回$a[“到期”]$b[“到期”];
});
印刷费($arr);
但这仍然显示在上面的顺序中,而它应该首先显示'09:00:00'值
one
和two
下索引的那些数组$arr
)YYYY-MM-DD hh:MM:ss
(因为“最大”位置值将在开始处),则会起作用usort
而不是uasort
,因为在这种情况下,没有必要保留键(以整数开头,既不是one
也不是due
)$arr=array();
$arr[“一”][]=阵列(
“到期日”=>“17-01-2021 10:00:00”,
);
$arr[“一”][]=阵列(
“到期日”=>“17-01-2021 09:00:00”,
);
$arr[“两个”][]=阵列(
“到期日”=>“19-01-2021 09:00:00”,
);
$arr[“两个”][]=阵列(
“到期日”=>“18-01-2021 09:00:00”,
);
foreach($arr as和$numberIndex){
usort($numberIndex,函数($a,$b){
返回strotime($a[“到期”])strotime($b[“到期”]);
});
}
印刷费($arr);
一些旁注:
- 请注意
处的&
,如果没有此项,PHP将在您的值的就地副本上工作,并且在&$numberIndex
中它永远不会更改$arr
- 只有当所有日期/时间都在历元时间0(1970年1月1日)之后时,使用
的这种方法才有效。如果需要使用较旧的日期,可以在排序回调中创建strotoime()
对象DateTime()
Array
(
[one] => Array
(
[0] => Array
(
[due] => 17-01-2021 09:00:00
)
[1] => Array
(
[due] => 17-01-2021 10:00:00
)
)
[two] => Array
(
[0] => Array
(
[due] => 18-01-2021 09:00:00
)
[1] => Array
(
[due] => 19-01-2021 09:00:00
)
)
)
我不知道使用
uasort
函数有什么方法可以做到这一点,当然创建循环会更容易,或者这是一个性能问题吗?有几个问题-您的数据在$arr[“one”]
中,所以使用这个数组进行排序,测试的两边都是$b[“due”]
@NigelRen我确实有比“一”更多的键,所以我使用了$ret
如果您的数据比这更复杂,那么您需要展示一个简短的示例来澄清这一点,但希望这个想法能有所帮助。需要非常小心的一件事是,您正在比较字符串和(听起来好像)您希望它按日期/时间顺序排列。太棒了,非常感谢!