2016-04-15 77 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,$附加鏈接);