3

我正在为正在构建的论坛程序创建搜索功能。在某一时刻,我有一个名为 searchResults 的数组,它是数字的,包含“分数”作为其维度之一(其他是“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.

谢谢你的帮助。

4

2 回答 2

5

usort 允许按任何指定的比较函数排序

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

在这种情况下,$cmp 是一个函数,它根据 ['score'] 的值比较两个元素$a$b$searchResults 的值。$cmp 返回 0 表示相等,如果更大则返回负 val,如果$a['score']更大则返回正 val $b['score']。通常情况相反,但需要降序排序。

于 2011-03-26T03:30:30.013 回答
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
于 2011-03-26T03:31:52.967 回答