2011-10-08 90 views
2

我有一個動態PHP變量數組,這些變量是多個div ID的鍵。我正在尋找一種方法來對php數量進行排序並使用該順序來重新排列我的div。我已經找到了一些關於如何使用jquery基於數組輸入重新排列div的線程,但它們都不相同,以至於我的技能水平,我無法有效地適應它們的建議。這是一個非常接近我想要做的線程。 Dynamically arranging divs using jQuery使用PHP數組中的鍵排序和更改div顯示順序

我的目標的明確解釋:參​​賽者籌集資金,每個人都有一個籌款頁面。 php變量是他們從頁面中提取的金額。該功能將命令頁面上的div首先顯示最高收入者,依此類推。

下面的代碼反映了我的佈局,但我應該澄清,我的div都有獨特的內容,所以動態生成不適用於他們。

<?php 

$Contestants = array(
    $Totals[0] => 'contestant0', 
    $Totals[1] => 'contestant1', 
    $Totals[2] => 'contestant2' 
); 

krsort ($Contestants); 

?> 

<div id="container"> 
<div id="contestant0"> 
    <p><?php print ($Totals[0]) ?></p> 
</div> 
<div id="contestant1"> 
    <p><?php print ($Totals[1]) ?></p> 
</div> 
<div id="contestant2"> 
    <p><?php print ($Totals[2]) ?></p> 
</div> 
</div> 

我知道我給的代碼如何準系統是,但我已經搗爛的JavaScript我認爲是相當無用的,充其量尷尬。

任何幫助非常感謝。

+0

這實在不是一個好方法。 –

+0

你能更具體嗎? – syllables

+0

理想情況下,您需要使用自定義排序函數(http://php.net/manual/en/function.uksort.php)通過他們的捐贈金額對您的參賽者數組進行排序,然後使用for()循環輸出該數組。除非你有很多活的,用戶控制的排序你想在頁面上做,否則用PHP做這個工作是比JS更好的選擇。 –

回答

1

沒有需要jQuery,除非我失去了一些東西。

<?php 

$Contestants = array(
    $Totals[0] => 'contestant0', 
    $Totals[1] => 'contestant1', 
    $Totals[2] => 'contestant2' 
); 

rsort ($Contestants); 

?> 


<div id="container"> 
<?php foreach($Contestants as $k => $v) { ?> 
    <div id="<?php echo $v ?>"> 
    <p><?php echo $k ?></p> 
    </div> 
<?php } ?> 
</div> 
+0

非常酷的方法。不幸的是,這隻有在所有div都相同時纔有效。我的每個Div都有獨特的內容。如果多次使用,則會導致循環。 – syllables

0

在的jsfiddle做了一個簡單的例子了:

http://jsfiddle.net/2U7fv/4/

這聽起來像你需要使用一個標準的JS方法,「排序()」,這會佔用比較兩個參數的方法兩個參數,並返回1或更大的值,如果參數乙應比前參數A.進行排序http://www.w3schools.com/jsref/jsref_sort.asp

所以其過程是:

  • 把你所有的div陣列中的比陣列
  • 貫穿排序方法
    • 排序方法:
    • 獲取兩個div的捐款金額
    • 解析掉美元符號
    • 如果B較高,則返回1或更多,如果A較高則返回0或更小
  • 這將返回DOM節點的排序數組
  • 轉換數組到一個長HTML字符串
  • 的#container的HTML設置該字符串
+0

在我對你的原始問題的評論中,我建議使用PHP over JavaScript,除非你有特定的原因你不告訴我們。然而,值得注意的是,PHP的ksort()和JS的排序工作方式相似 - 它們都採用了兩個參數的回調函數,以您指定的方式比較參數。 –

+0

除非我誤解了,否則我認爲你們是從字面上理解我的隱喻佈局。我的示例代碼只是我的div佈局和命名系統的代表。真正的網站佈局在每個div中都有很多CSS和html內容,包括其他幾個div。如果我理解你的解決方案,你進入每個div,獲得php捐贈價值,剝離divs,對值進行排序,然後將它們打印爲單個div內的html。謝謝你這樣一個深思熟慮的迴應,但我確實需要維護div,只在頁面上排序。 – syllables

+0

在這個例子中,我根據捐贈金額重新排列div。你需要他們點什麼?在我的例子中,沒有任何東西被「剝離」 - 我將所有div加載到一個數組中,按數量對它們進行重新排序,然後將它們重新放到同一個地方的頁面上。 –