2016-04-15 41 views
0

目前,我使用PDO从MySQL数据库提取数据。在页面中的一个点,我再次有使用PHP对现有数组进行排序

<?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元素按正确顺序排列(因为它们正在按照Order列中的值在MySQL查询中进行排序)

我想要做的是对第二个块进行排序,然后按同样的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>"; 
    } 
?> 

编辑:道歉,我完全糊涂了我自己这里 - 订单IS NOT变化,它的处理的正确方法。我的困惑来自于这样一个事实,即我在第二个块中将li元素与float: right一起浮动,这使得链接反向显示。

我实际上想要做的是按照Order降序排列第二个块,以便第二个块读取1,2,3,4,5而不是现在的5,4,3,2,1。

+0

你的意思是你的数组在第一次foreach循环后发生了变化......是这样吗? – Ali

+0

当然,你想在你的'foreach'循环中对___进行排序 –

+0

我认为你可以使用第二块的php sort()函数。 – naf4me

回答

2

看看使用array_reverse

$reversed = array_reverse($sitelinks); 

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

太棒了,谢谢。 – hj8ag

+0

一旦我们理解了这个问题,答案很简单。祝你好运,或者应该'很快见到你' – RiggsFolly

0

你的具体情况,我建议使用array_reverse

将基本返回相同的阵列,但在相反的顺序。这种方式更简单明了,您可以使用相同的顺序标准,只需更改asc即可。

<?php 
$siteLinkDesc = array_reverse($siteLinkDesc); 
?> 

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

  • 应用多排序到原始数组:

    在array_multisort($ orderSorting,SORT_DESC,$附加链接);