我有一个大数组(这只是它的一部分):
[0] => stdClass Object
(
[products] => Array
(
[0] => stdClass Object
(
[body_html] => bodyhtml
[published_at] => 2012-12-16T23:59:18+00:00
[created_at] => 2012-12-16T11:30:24+00:00
[updated_at] => 2012-12-18T10:52:14+00:00
[vendor] => Name
[product_type] => type
)
[1] => stdClass Object
(
[body_html] => bodyhtml
[published_at] => 2012-12-16T23:59:18+00:00
[created_at] => 2012-12-16T10:30:24+00:00
[updated_at] => 2012-12-18T10:52:14+00:00
[vendor] => Name
[product_type] => type
)
)
)
我需要在创建之日安排每个产品...... 我尝试过各种各样的usort,ksort,uksort技术,试图让它按特定顺序(按时间顺序排列)但失败了!
任何指导都将非常受欢迎
答案 0 :(得分:1)
您需要使用uasort函数,它允许您指定您编写的简单比较函数。有关详细信息,请参阅uasort。您还可以将匿名函数定义为uasort调用的一部分。由于您有一个包含数组的对象,因此请确保将对象的数组传递给uasort函数。由于您正在对一组对象进行排序,因此您的比较函数应考虑到它正在使用2个对象。
以您的回复和您的var_dump为基础:
uasort($foo[0]->products, function($a, $b) {
if ($a->created_at < $b->created_at) {
return -1;
}
return 1;
});
答案 1 :(得分:0)
以下是一个例子:
$arr_1 = array('name' => 'A',
'date' => '2012-12-16T11:30:24+00:00' ,
'created_at' => '2012-12-16T11:30:24+00:00');
$arr_2 = array('name' => 'B',
'date' => '2012-12-16T11:30:22+00:00' ,
'created_at' => '2012-12-16T11:30:21+00:00');
$test_array = array($arr_1, $arr_2);
var_dump($test_array);
usort($test_array, function($a, $b) {
$a_date = new DateTime($a['date']);
$b_date = new DateTime($b['date']);
if ($a_date < $b_date) {
return -1;
}
return 1;
});
var_dump($test_array);