Как отсортировать массив по дате его создания - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть массив статей.

 $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 ]

3 голосов
/ 22 февраля 2011

Вы можете использовать usort:

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

usort($allarticles, 'csort');

DEMO

1 голос
/ 22 февраля 2011

Я полагаю, что вы ищете usort .

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

Все еще просыпаетесь, поэтому, если это происходит в обратном порядке, поменяйте местами 1 и -1.Кроме того, это предполагает, что данные являются фактическими "time ()" с.Если это не так, вам нужно проанализировать значение, которое вы можете сравнить перед проверкой, но все это можно сделать в новой функции.

EDIT

Если они еще не time() s:

function sortbycreated($a,$b){
  $_a = strtotime($a['created']); $_b = strtotime($b['created']);
  return ($_a > $_b ? 1 : ($_a < $_b ? -1 : 0));
}
0 голосов
/ 22 февраля 2011

Возможно, лучше вместо этого отсортировать это в базе данных. Для меня бесполезно делать итерации чего-то, что будет бесплатно предоставляться из базы данных.

В случае, если вы заинтересованы. Вам просто нужно сделать это:

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

в противном случае просто используйте одно из других решений, предложенных в протекторе.

0 голосов
/ 22 февраля 2011

Возможно, вы сможете использовать статический метод CakePHP Set :: sort здесь .

0 голосов
/ 22 февраля 2011
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;
}
0 голосов
/ 22 февраля 2011
$sortedArticles = array();
foreach ( $allarticles as $article ) {
    $timestamp = strtotime($article ['created']);
    $sortedArticles[$timestamp] = $article;
}
ksort($sortedArticles);

var_dump($sortedArticles);

Или когда вы извлекаете данные из базы данных, просто выполните ORDER BY created.

0 голосов
/ 22 февраля 2011

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;
});
...