我有一个.php从我的Joomla数据库中检索字段,然后使用foreach函数回显它们:
<?php
$jquery1 = "SELECT `fulltext`,alias,metakey,publish_up,metadesc FROM xxx_content WHERE catid=22 AND state= '1'";
$jdb1->setQuery( $jquery1 );
$jfeed1= $jdb1->loadObjectList();
foreach ($jfeed1 as $jitem1):
?>
<li>
<div>
<?php
$oldLocale = setlocale(LC_TIME, 'en_US');
echo strftime("%a %d %b %Y", strtotime($jitem1->publish_up));
setlocale(LC_TIME, $oldLocale);
?>
</div>
<div><?php echo $jitem1->fulltext; ?></div>
</li>
<?php endforeach; ?>
但是我想按日期对foreach函数进行排序,我尝试了两种不同的方法(基于其他SE问题),但每次我收到此警告:
Warning: usort() expects parameter 1 to be array, null given in...
这是我的第一次尝试:
$jfeed1= $jdb1->loadObjectList();
function date_compare($a, $b)
{
$t1 = strtotime($a['publish_up']);
$t2 = strtotime($a['publish_up']);
return $t1 - $t2;
}
usort($jitem1, 'date_compare');
foreach ($jfeed1 as $jitem1):
这是我的第二次尝试:
$jfeed1= $jdb1->loadObjectList();
usort($jfeed1->publish_up, function($a, $b) {
$date1 = DateTime::createFromFormat('Y-m-d H:i:s', $a);
$date2 = DateTime::createFromFormat('Y-m-d H:i:s', $b);
return $date1 > $date2;
});
foreach ($jfeed1 as $jitem1):
我已经学会了#34; PHP只是通过查看代码和tuto,所以我错过了许多基本概念,为什么我不明白我应该做什么来解决这个警告。谢谢你的帮助!
编辑1: 功能
<?php
var_dump($jfeed1)
?>
给了我第一项:
array(22) { [0]=> object(stdClass)#318 (5) { ["fulltext"]=> string(212) "Yesterday ..." ["alias"]=> string(3) "237" ["metakey"]=> string(7) "Romania" ["publish_up"]=> string(19) "2011-11-15 09:06:39" }
编辑2
$jfeed1= $jdb1->loadObjectList();
function date_compare($a, $b)
{
$t1 = strtotime($a['publish_up']);
$t2 = strtotime($b['publish_up']);
return $t1 - $t2;
}
usort($jfeed1, 'date_compare');
foreach ($jfeed1 as $jitem1):
答案 0 :(得分:1)
您可以使用以下命令直接在查询中按日期对每个数组条目进行排序:
ORDER BY publish_up DESC (descending order)
ORDER BY publish_up ASC (ascending order)
如:
$jquery1 = "SELECT `fulltext`,alias,metakey,publish_up,metadesc FROM xxx_content WHERE catid=22 AND state= '1' ORDER BY publish_up ASC";
如果你想保留这个PHP函数date_compare
,那么你必须替换:
$a['publish_up']
通过
$a->publish_up
如:
$jfeed1= $jdb1->loadObjectList();
function date_compare($a, $b)
{
$t1 = strtotime($a->publish_up);
$t2 = strtotime($b->publish_up);
return $t1 - $t2;
}
usort($jfeed1, 'date_compare');
foreach ($jfeed1 as $jitem1):
return $t1 - $t2;
正在提升
return $t2 - $t1;
正在降序