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

时间:2016-04-15 10:54:11

标签: php sorting

目前,我正在使用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,就像它一样现在

2 个答案:

答案 0 :(得分:2)

使用array_reverse

查看
$reversed = array_reverse($sitelinks);

foreach ($reversed as $sitelink) {
    echo    "\n<li class=\"desktoplinkitem\"><a href=\"{$sitelink['URL']}\">{$sitelink['Text']}</a></li>";
}

答案 1 :(得分:0)

在您的特定情况下,我建议使用 array_reverse

它基本上会以相反的顺序返回相同的数组。这种方式更简单明了,您可以使用相同的订单标准,只需更改asc for asc。

    QComboBox* c = new QComboBox();
    QAbstractItemView* v = new MyComboView();
    c->setView(v);

希望这会有所帮助。 如果您仍然喜欢采用多种方式。它更复杂,如果订单标准与原始标准不同,我只推荐使用。这是你应该做的(有点): 1.获取一系列排序标准:     foreach($ sitelinks $ key =&gt; $ sitelink){          $ orderSorting [$ key] = $ sitelink ['Order'];     }

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

    array_multisort($ orderSorting,SORT_DESC,$ sitelinks);