3

我正在爲我正在構建的論壇程序創建搜索功能。在一個點上,我有一個名爲searchResults的數組,它是數字幷包含'score'作爲其維之一(其他是'timeStarted','authorUID'和'TID')通過不是第一個維度的數值對多維數組排序

所以,這個數組在混亂中這一點,我需要組織它到$ searchResults [1]將是最高的'分數'和[2]將具有第二高的地方,等等。我在php.net看着array_multisort,但很快就失去了它的工作原理。那麼如何按照數字順序排序$ searchResults(重新排列鍵),並按照排序機制進一步降序的順序降序排列?真的沒有任何代碼可以用它,但如果你需要一個陣列看起來如何的佈局,你可以去:

$searchResults: 
    [1] - ['timeStarted'] 
     ['authorUID'] 
     ['score'] <- Need to sort first dimension by this value descending 
     ['TID'] 
    etc. 

感謝您的幫助。

+0

陣列處於混亂之中。哈,我喜歡它 – 2011-03-26 03:31:04

回答

5

usort允許任何指定的比較功能

$cmp = function($a,$b) {return $b['score'] - $a['score'];}; 
usort($searchResults, $cmp); 

在這種情況下的排序,$ CMP是比較兩個元件$a和$ SearchResult所$b根據[「得分」]的值的函數。 $ cmp在等於時返回0,如果$a['score']更大則返回負值,如果$b['score']更大則返回正值。它通常是相反的,但是需要降序排列順序。

+0

謝謝,我會給它一個旋風。我知道usort可以做這樣的事情,但是關於它在內部是如何工作的文檔缺乏,我不確定通過數組進行排序的機制 - 不知道在編寫用戶定義的函數時它是如何迭代的爲了它。謝謝! – Adam 2011-03-26 03:38:40

+0

你可能已經過度 - 我個人不知道排序算法是什麼。在平等的情況下,我不知道訂單是否保留(穩定與不穩定的排序)。但我不需要知道,那就是抽象的意義 - 我提供了一個比較功能,我有信心並且排序正常。希望它也適合你。 – 2011-03-26 03:44:15

0

你想要的功能是usort。看例如#2:

<?php 
function cmp($a, $b) 
{ 
    return strcmp($a["fruit"], $b["fruit"]); 
} 

$fruits[0]["fruit"] = "lemons"; 
$fruits[1]["fruit"] = "apples"; 
$fruits[2]["fruit"] = "grapes"; 

usort($fruits, "cmp"); 

while (list($key, $value) = each($fruits)) { 
    echo "\$fruits[$key]: " . $value["fruit"] . "\n"; 
} 
?> 

輸出:

$fruits[0]: apples 
$fruits[1]: grapes 
$fruits[2]: lemons