2014-03-02 75 views
-4

我想將列表從高值排序到低值。其產值來自投票中的投票。如何在PHP中按值排序列表

這裏是創建列表的代碼:

function votingScore($item, $itemvoted) { 
$hector=count($itemvoted);$totalvotes=0;$in=0;$stepstr=''; 
$totalvotes=SumArray($itemvoted); 
$in=0; 
if ($totalvotes==0) { $totalvotes=0.0001; } 
while ($in<$hector) { 
    $stepstr=$stepstr.'<li>'.stripslashes($item[$in]).(int)(($itemvoted[$in]/$totalvotes)*100).'% '; 
    $stepstr=$stepstr.'</li>'; 
    $in++; 
} 
return '<ul>'.$stepstr.'</ul>'; } 

的票都保存在lokes像這樣的文本文件: optionOne:11:optionTwo:5:

我試着做以下:

arsort($stepstr); 
foreach ($stepstr as $key => $val) { 
echo "stepstr[" . $key . "] = " . $val . "\n"; } 

FIX:

function votingScore($item, $itemvoted) { 
    $combineSort = array_multisort($itemvoted, SORT_DESC, $item, SORT_DESC); //added this line and got it to work 
    $hector=count($itemvoted);$totalvotes=0;$in=0;$stepstr=''; 
+6

http://www.php.net/manual/array.sorting.php –

+0

@ jan1337z加油!我敢打賭,這個功能是負責顯示一些重要的東西。無論什麼東西。我想,這肯定是重要的。它應該是,可能。也許不會?我不知道。 – matewka

+1

@ jan1337z更像這樣? – florisvl

回答

0

如果我正確地理解你的代碼,你只需要在$itemvotedarsort如:

function votingScore($item, $itemvoted) { 
    $success = arsort($itemvoted); //Success will either be True or False 
    .... 

然而,這取決於$itemvoted樣子(是聯想還是不是),你可能需要一個不同的排序函數如@George_Cummins所述。看到link

+0

謝謝@ajon!這做了一部分工作。奇怪的是,它只對列表中的數字進行排序,而不是對屬於該值的選項進行排序。 當值是這樣的: optionOne:12 optionTwo:18 optionThree:13 它的排序是這樣的: optionOne:18 optionTwo:13 optionThree:12 但我希望它像這個: optionTwo:18 optionThree:13 optionOne:12 – florisvl

+0

好的,請參閱編輯...您需要使用arsort,它將按相反順序對數組進行排序,並保持指示相同。假定$ itemvoted是一個關聯數組將數值映射到選項:例如{[12] => optionOne,[18] => optionTwo,...} – ajon

+0

想通了!我使用以下內容: \t $ combineSort = array_multisort($ itemvoted,SORT_DESC,$ item,SORT_DESC); – florisvl