PHP按日期排序数组?
可能重复:PHP按日期排序数组?,php,arrays,datetime,sorting,date,Php,Arrays,Datetime,Sorting,Date,可能重复: 我在PHP数组中有一些来自XML或JSON的数据,如下所示: [0]= array(2) { ["title"]= string(38) "Another title" ["date"]= string(31) "Fri, 17 Jun 2011 08:55:57 +0200" } [1]= array(2) { ["title"]= string(38) "My title" ["date"]= string(31) "Mon, 16 Jun 20
我在PHP数组中有一些来自XML或JSON的数据,如下所示:
[0]= array(2) {
["title"]= string(38) "Another title"
["date"]= string(31) "Fri, 17 Jun 2011 08:55:57 +0200"
}
[1]= array(2) {
["title"]= string(38) "My title"
["date"]= string(31) "Mon, 16 Jun 2010 06:55:57 +0200"
}
我想做的是按日期订购这两件商品。
在排序之前,您不需要将日期转换为时间戳,但这是一个好主意,因为如果不执行此步骤,排序将花费更多时间
$data = array(
array(
"title" => "Another title",
"date" => "Fri, 17 Jun 2011 08:55:57 +0200"
),
array(
"title" => "My title",
"date" => "Mon, 16 Jun 2010 06:55:57 +0200"
)
);
function sortFunction( $a, $b ) {
return strtotime($a["date"]) - strtotime($b["date"]);
}
usort($data, "sortFunction");
var_dump($data);
更新
在较新的PHP版本中,您也可以使用。在这里,您可以找到上述内容的更简明版本:
usort($data, fn($a, $b) => strtotime($a["date"]) - strtotime($b["date"]));
我建议使用DateTime对象而不是字符串,因为您无法轻松比较排序所需的字符串。你还可以从约会中获得额外的好处 一旦有了DateTime对象,排序就很容易了:
usort($array, function($a, $b) {
return ($a['date'] < $b['date']) ? -1 : 1;
});
usort($array,function($a,$b){
报税表($a['date']<$b['date'])?-1:1;
});
他曾考虑将日期作为一个键,但担心值会一个接一个地写入,我想展示的是(可能不是很明显,这就是我编辑的原因)他仍然可以保留完整的值,而不是一个接一个地写入,这可以吗
<?php
$data['may_1_2002']=
Array(
'title_id_32'=>'Good morning',
'title_id_21'=>'Blue sky',
'title_id_3'=>'Summer',
'date'=>'1 May 2002'
);
$data['may_2_2002']=
Array(
'title_id_34'=>'Leaves',
'title_id_20'=>'Old times',
'date'=>'2 May 2002 '
);
echo '<pre>';
print_r($data);
?>
看看这篇文章的第一个答案:非常直接、清晰的答案。谢谢。答案很清楚,但如果两个日期相等,这将丢失值。这不是真的,为什么会这样?他们会紧跟在一起。这个版本呢<代码>usort($sortArray,function($a,$b){返回strcmp($a['article\u created\u date'],$b['article\u created\u date']);})代码>
<?php
$data['may_1_2002']=
Array(
'title_id_32'=>'Good morning',
'title_id_21'=>'Blue sky',
'title_id_3'=>'Summer',
'date'=>'1 May 2002'
);
$data['may_2_2002']=
Array(
'title_id_34'=>'Leaves',
'title_id_20'=>'Old times',
'date'=>'2 May 2002 '
);
echo '<pre>';
print_r($data);
?>