Как отсортировать массив по дате его создания
У меня есть массив статей.
$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 ответов
Возможно, вы сможете использовать статический метод CakePHP Set::sort здесь.
Ты можешь использовать usort
:
function csort($a, $b) {
return strcmp($b['created'], $a['created']);
}
usort($allarticles, 'csort');
Я верю, что вы ищете usort.
function sortbycreated($a,$b){
return ($a['created']>$b['created']?1:($a['created']<$b['created']?-1:0));
}
usort($allarticles,'sortbycreated');
Все еще просыпается, так что если это происходит в обратном порядке, поменяйте местами 1
а также -1
, Кроме того, это предполагает, что данные являются фактическими "time()" с. Если это не так, вам нужно проанализировать значение, которое вы можете сравнить перед проверкой, но все это можно сделать в новой функции.
РЕДАКТИРОВАТЬ
Если они еще не time()
s:
function sortbycreated($a,$b){
$_a = strtotime($a['created']); $_b = strtotime($b['created']);
return ($_a > $_b ? 1 : ($_a < $_b ? -1 : 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;
});
Вероятно, лучше отсортировать это в базе данных. Для меня бесполезно делать итерации чего-то, что будет бесплатно предоставляться из базы данных.
В случае, если вы заинтересованы. Вы просто должны сделать это:
$this->YourModel->find('all', array('order'=>'created'));
в противном случае просто используйте одно из других решений, предложенных в протекторе.
$sortedArticles = array();
foreach ( $allarticles as $article ) {
$timestamp = strtotime($article ['created']);
$sortedArticles[$timestamp] = $article;
}
ksort($sortedArticles);
var_dump($sortedArticles);
Или когда вы выбираете данные из базы данных просто ORDER BY created
,
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;
}