按日期排序foreach给出警告:usort()期望参数1为数组,给定为null

时间:2014-08-28 09:01:58

标签: php sorting joomla foreach usort

我有一个.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):

1 个答案:

答案 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;正在降序