目前,我正在使用PDO从MySQL数据库中提取数据。在页面的某一点上,我有
<?php
$sitelinks=$pdo->query("SELECT * FROM sitelinks WHERE `show` = 'yes' ORDER BY `Order` ASC")
->fetchAll();
foreach ($sitelinks as $sitelink) {
echo "'n<li class='"linkitem'"><a href='"{$sitelink['URL']}'">{$links['Text']}</a></li>";
}
?>
然后在稍后的页面中,我再次使用$sitelink
值,如下所示:
<?php
foreach ($sitelinks as $sitelink) {
echo ''n<li class='"desktoplinkitem'">
<a href='"{$sitelink['URL']}'">{$sitelink['Text']}</a>
</li>";
}
?>
在第一个块中,我将以正确的顺序获得$sitelink
元素(因为它们在MySQL查询中按Order
列中的值排序)
然后,我要做的是对第二个块进行排序,也按相同的Order
列进行排序。从PHP手册来看,我猜array_multisort
可能是最好的,但我对正确的语法有点困惑。我尝试了以下方法:
<?php
foreach ($sitelinks as $sitelink) {
array_multisort($sitelink[`Order`], SORT_ASC);
echo "'n<li class='"desktoplinkitem'">
<a href='"{$sitelink['URL']}'">{$sitelink['Text']}</a></li>";
}
?>
编辑:很抱歉,我在这里完全弄糊涂了——的顺序没有改变,它正在以正确的方式处理。我的困惑来自于这样一个事实,即我在第二个块中浮动li
元素和float: right
,这使得链接以相反的方式出现。
我实际上想做的是按Order
降序对第二个块进行排序,使第二个区块读取1、2、3、4、5,而不是现在的5、4、3、2、1。
查看使用array_reverse
$reversed = array_reverse($sitelinks);
foreach ($reversed as $sitelink) {
echo "'n<li class='"desktoplinkitem'"><a href='"{$sitelink['URL']}'">{$sitelink['Text']}</a></li>";
}
在您的特定情况下,我建议使用array_reverse
它将基本上返回相同的数组,但顺序相反。这种方式更容易,也更清楚,您使用相同的订单标准,只需将asc更改为desc.
<?php
$siteLinkDesc = array_reverse($siteLinkDesc);
?>
希望这能有所帮助。以防你仍然想选择多端口方式。它更复杂,我只建议在订单条件与原始条件不同的情况下使用。这是你应该做的(有点):1.获取一个排序标准数组:foreach($sitelinks$key=>$sitelink){$orderSorting[$key]=$sitelink['Order'];}
对原始数组应用多重排序:
array_multi-SORT($orderSorting、SORT_DESC、$sitelinks);