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