0

我有一系列文章。

 $allarticles = Array ([0] => Array ([id] => 24,
                                     [article_id] => 74,
                                     [created] => 2011-01-01 20:48:48 ) 
                       [1] => Array ( [id] => 39,
                                      [article_id] => 94,
                                      [created] => 2011-02-21 21:06:44 ) 
                      );     

我想按创建日期(最近的 DESC)对数组进行排序。

我很感激任何帮助。

谢谢。

4

7 回答 7

3

您可以使用usort

function csort($a, $b) {
    return strcmp($b['created'], $a['created']);
}

usort($allarticles, 'csort');

演示

于 2011-02-22T14:57:26.883 回答
1

我相信您正在寻找usort

function sortbycreated($a,$b){
  return ($a['created']>$b['created']?1:($a['created']<$b['created']?-1:0));
}
usort($allarticles,'sortbycreated');

仍在醒来,因此如果以相反的顺序排序,请交换1and -1。此外,这假设数据是实际的“时间()”。如果不是,您需要在检查之前解析为可以比较的值,但所有这些都可以在新函数中完成。

编辑

如果它们还不是time()s:

function sortbycreated($a,$b){
  $_a = strtotime($a['created']); $_b = strtotime($b['created']);
  return ($_a > $_b ? 1 : ($_a < $_b ? -1 : 0));
}
于 2011-02-22T14:56:43.063 回答
0

http://www.php.net/manual/en/function.uasort.php

uasort($allarticles, function ($a, $b) {
    $diff = 
    /*
    write code here to convert the string dates to numeric equivalents and subtract them. 
    If you want to reverse the order, revers the way you subtract.
    */
    return $diff;
});
于 2011-02-22T14:56:00.733 回答
0
$sortedArticles = array();
foreach ( $allarticles as $article ) {
    $timestamp = strtotime($article ['created']);
    $sortedArticles[$timestamp] = $article;
}
ksort($sortedArticles);

var_dump($sortedArticles);

或者当您从数据库中获取数据时,只需执行ORDER BY created.

于 2011-02-22T14:56:38.480 回答
0
uasort($allarticles, 'sort_by_date');
function sort_by_date($a, $b) {
    if (strtotime($a['created']) == strtotime($b['created'])) {
        return 0;
    }
    return strtotime($a['created') > strtotime($b['created']) ? 1 : -1;
}
于 2011-02-22T14:56:39.380 回答
0

您可以在这里使用 CakePHP 的静态 Set::sort 方法。

于 2011-02-22T17:54:34.220 回答
0

可能最好在数据库中对此进行排序。对我来说,对从数据库免费提供的东西进行迭代是没有用的。

如果你有兴趣。你只需要这样做:

$this->YourModel->find('all', array('order'=>'created'));

否则只需使用胎面中提出的其他解决方案之一。

于 2011-02-22T19:26:17.570 回答