2012-12-18 35 views
-2

我有一个大阵(这只是它的部分):使用usort重新安排多维数组

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

任何指导,将最赞赏

回答

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; 
}); 
+0

这就是我迷路,我可以做一个单一的阵列,但深入到阵列就是我失败的地方...... –

+0

“我可以将它做到单个阵列,但是更深入阵列就是我失败的地方。”在这里给我们一些帮助。我没有看到任何东西,只有一个对象数组。它恰好在一个对象内,但不应该阻止排序。我错过了什么吗?谢谢,〜Ray –

+0

我正在努力阵列内的数组,并从第二个数组中获取created_at数据,然后组织所有的产品使用它... –

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); 
+0

日期格式实际上是格式化的,它可以像字符串一样进行比较,早期日期是“较小”的字符串。没有必要用DateTime解析它们。 – Sven

+0

@Sven ok。我明白,那不是他的问题。这是他有问题的多维度方面。 – busypeoples