如何按创建日期对数组进行排序

时间:2011-02-22 14:52:56

标签: php sorting asort

我有一系列文章。

 $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最近的第一个)。

我感谢任何帮助。

感谢。

7 个答案:

答案 0 :(得分:3)

您可以使用usort

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

usort($allarticles, 'csort');

DEMO

答案 1 :(得分:1)

我相信你正在寻找usort

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

仍在醒来,所以如果按相反的顺序排序,请交换1-1。此外,这假设dats是实际的“time()”。如果它们不是你需要解析的值,你可以在检查之前进行比较,但所有这些都可以在新功能中完成。

修改

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

function sortbycreated($a,$b){
  $_a = strtotime($a['created']); $_b = strtotime($b['created']);
  return ($_a > $_b ? 1 : ($_a < $_b ? -1 : 0));
}

答案 2 :(得分: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;
});

答案 3 :(得分:0)

$sortedArticles = array();
foreach ( $allarticles as $article ) {
    $timestamp = strtotime($article ['created']);
    $sortedArticles[$timestamp] = $article;
}
ksort($sortedArticles);

var_dump($sortedArticles);

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

答案 4 :(得分: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;
}

答案 5 :(得分:0)

您可以使用CakePHP静态Set :: sort方法here

答案 6 :(得分:0)

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

如果您有兴趣。你必须这样做:

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

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