2014-08-28 1 views
-1

У меня есть .php, что извлекать поля из моей базы данных Joomla, а затем эхо их с помощью функции Еогеасп:Сортировка по дате Еогеасп дают предупреждение: usort() ожидает параметр 1, чтобы быть массивом, нуль приведены в

<?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; ?> 

Однако я хотел бы, чтобы отсортировать функции Еогеасп по дате, я попробовал два разных способа сделать это (на основе других вопросов, 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): 

я «узнал» PHP, просто посмотрев на коды и Tuto, поэтому я пропускаю много fondamental понятий, поэтому я не понимаю, что Я должен сделать это, чтобы решить это предупреждение. Спасибо за вашу помощь!

EDIT 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" } 

EDIT 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

вход в этой функции не является массивом, но NULL (= ничего). Ваша переменная не имеет значения. Возможно, опечатка функции/метода ничего не возвращает. – Martijn

+0

Каково содержимое '$ jfeed1' после вызова' loadObjectList() '? – Sugar

+0

@ ClémentMalet. Ну, я не знаю. Я ищу $ jfeed1 в моем .php, и все они находятся в коде выше. Я загрузил свой полный .php здесь http://www.docspal.com/viewer?id=twgcbiyc-6316723. Большое спасибо за вашу помощь! – Enora

ответ

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; спускается