使用PHP对现有数组进行排序


sorting an existing array with PHP

目前,我正在使用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'];}

  1. 对原始数组应用多重排序:

    array_multi-SORT($orderSorting、SORT_DESC、$sitelinks);