-2

我有一个大数组(这只是其中的一部分):

[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 技术,但都失败了,试图让它按照特定的顺序(按时间顺序)但失败了!

任何指导将不胜感激

4

2 回答 2

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;
});
于 2012-12-18T23:08:15.277 回答
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);
于 2012-12-18T23:14:39.110 回答