joomla php排序数组从高到低
我正在尝试将数组从高到低排序 查询是在Joomla模块中编写的,如下所示:joomla php排序数组从高到低,php,sorting,joomla,Php,Sorting,Joomla,我正在尝试将数组从高到低排序 查询是在Joomla模块中编写的,如下所示: $authors = array(); if (count($rows)) { foreach ($rows as $row) { $author = JFactory::getUser($row->created_by); $author->link = JRoute::_(K2HelperRoute::getU
$authors = array();
if (count($rows))
{
foreach ($rows as $row)
{
$author = JFactory::getUser($row->created_by);
$author->link = JRoute::_(K2HelperRoute::getUserRoute($author->id));
$query = "SELECT id, gender, description, image, url, `group`, plugins FROM #__k2_users WHERE userID=".(int)$author->id;
$db->setQuery($query);
$author->profile = $db->loadObject();
if ($params->get('authorAvatar'))
{
$author->avatar = K2HelperUtilities::getAvatar($author->id, $author->email, $componentParams->get('userImageWidth'));
}
if (K2_JVERSION != '15')
{
$languageCheck = '';
if ($application->getLanguageFilter())
{
$languageTag = JFactory::getLanguage()->getTag();
$languageCheck = "AND i.language IN (".$db->Quote($languageTag).", ".$db->Quote('*').") AND c.language IN (".$db->Quote($languageTag).", ".$db->Quote('*').")";
}
$query = "SELECT i.*, c.alias as categoryalias FROM #__k2_items as i
LEFT JOIN #__k2_categories c ON c.id = i.catid
WHERE i.created_by = ".(int)$author->id."
AND i.published = 1
AND i.access IN(".implode(',', $user->getAuthorisedViewLevels()).")
AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." )
AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." )
AND i.trash = 0 AND created_by_alias='' AND c.published = 1 AND c.access IN(".implode(',', $user->getAuthorisedViewLevels()).") AND c.trash = 0 {$languageCheck} ORDER BY created DESC";
}
else
{
$query = "SELECT i.*, c.alias as categoryalias FROM #__k2_items as i
LEFT JOIN #__k2_categories c ON c.id = i.catid
WHERE i.created_by = ".(int)$author->id."
AND i.published = 1
AND i.access <= {$aid}
AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." )
AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." )
AND i.trash = 0 AND created_by_alias='' AND c.published = 1 AND c.access <= {$aid} AND c.trash = 0 ORDER BY created DESC";
}
$db->setQuery($query, 0, 1);
$author->latest = $db->loadObject();
$author->latest->id = (int)$author->latest->id;
$author->latest->link = urldecode(JRoute::_(K2HelperRoute::getItemRoute($author->latest->id.':'.urlencode($author->latest->alias), $author->latest->catid.':'.urlencode($author->latest->categoryalias))));
$query = "SELECT COUNT(*) FROM #__k2_comments WHERE published=1 AND itemID={$author->latest->id}";
$db->setQuery($query);
$author->latest->numOfComments = $db->loadResult();
if ($params->get('authorItemsCounter'))
{
if (K2_JVERSION != '15')
{
$languageCheck = '';
if ($application->getLanguageFilter())
{
$languageTag = JFactory::getLanguage()->getTag();
$languageCheck = "AND language IN (".$db->Quote($languageTag).", ".$db->Quote('*').")";
}
$query = "SELECT COUNT(*) FROM #__k2_items WHERE {$where} published=1 AND ( publish_up = ".$db->Quote($nullDate)." OR publish_up <= ".$db->Quote($now)." ) AND ( publish_down = ".$db->Quote($nullDate)." OR publish_down >= ".$db->Quote($now)." ) AND trash=0 AND access IN(".implode(',', $user->getAuthorisedViewLevels()).") AND created_by_alias='' AND created_by={$row->created_by} {$languageCheck} AND EXISTS (SELECT * FROM #__k2_categories WHERE id= #__k2_items.catid AND published=1 AND trash=0 AND access IN(".implode(',', $user->getAuthorisedViewLevels()).") {$languageCheck} )";
}
else
{
$query = "SELECT COUNT(*) FROM #__k2_items WHERE {$where} published=1 AND ( publish_up = ".$db->Quote($nullDate)." OR publish_up <= ".$db->Quote($now)." ) AND ( publish_down = ".$db->Quote($nullDate)." OR publish_down >= ".$db->Quote($now)." ) AND trash=0 AND access<={$aid} AND created_by_alias='' AND created_by={$row->created_by} AND EXISTS (SELECT * FROM #__k2_categories WHERE id= #__k2_items.catid AND published=1 AND trash=0 AND access<={$aid} ) ";
}
$db->setQuery($query);
$numofitems = $db->loadResult();
$author->items = $numofitems;
}
$authors[] = $author;
}
}
return $authors;
}
任何想法都值得赞赏
谢谢通常,可以通过指定顺序对数据库查询进行排序,如中所示
$query->order('my_table.my_column desc')
如果要对PHP数组进行排序,并且需要自定义排序条件,则可以将自己的排序条件与usort
一起使用。例如:
// Your comparison function:
function myComparer($object1, $object2)
{
if ($object1->item == $object2->item) {
return 0;
}
return ($object1->item < $object2-item) ? -1 : 1;
}
// Sort the array in place
usort($authors, 'myComparer');
//您的比较函数:
函数myComparer($object1,$object2)
{
如果($object1->item==$object2->item){
返回0;
}
返回($object1->item<$object2 item)?-1:1;
}
//将数组排序到位
usort($authors,'myComparer');
注意:只需交换比较返回值,即可颠倒排序顺序:
return ($object1->itemCount < $object2-itemCount) ? 1 : -1;
return($object1->itemCount<$object2 itemCount)?1 : -1;
谢谢您的建议,但上面的代码给了我一个空白页警告:usort()希望参数1是数组,在第167行的/home/proteino/public\u html/modules/mod\u k2\u tools/helper.php中给出的对象致命错误:无法重新声明myComparer()(以前在/home/proteino/public\u html/modules/modules/modules\u k2\u tools/helper.php:156中声明)在第156行的/home/proteino/public_html/modules/mod_k2_tools/helper.php中,您应该向usort传递一个数组。不要包含函数两次。我尝试了所有可能的组合usort($authors,'myparer')usort($authors[],'myparer')usort($author,'myparer')usort($author[],'myparer')都不起作用。如果我只使用arsort,表会排序,但不会根据$author->items=$numofitems;但根据另一件事,你拼写“myComparer”错了。当你有Joomla问题时,请把它们发到Stack Exchange。您应该使用Joomla的查询构建方法构建查询。您的代码可以进行重构,以压缩条件查询构建<代码>$其中是个谜。事实上,看起来你可以结合一些查询来避免很多复杂的代码。这个页面没有经过投票表决的答案:@mickmackusa当然这个类没有优化,但它是joomla的内置模块,所以我没有编写它。在我发帖之前,相信我,我尝试了一切。但我不是一个声音开发人员,也没有数组(键、值、对象)方面的经验。因此,根据答案,我无法区分是将$author替换为$a还是将$items替换为$aDon。如果不比较它们的字符串值,请使用jspcal的解决方案。此外,不要在这里(永远)共享代码的图像,我们总是希望处理文本,以防复制粘贴。3v4l.org是一个很好的工具。
return ($object1->itemCount < $object2-itemCount) ? 1 : -1;