通过不是第一个维度的数值对多维数组进行排序

时间:2011-03-26 03:24:34

标签: php sorting multidimensional-array dimensions array-multisort

我正在为我正在构建的论坛程序创建搜索功能。有一次,我有一个名为searchResults的数组,它是一个数字,包含'score'作为其维度之一(其他是'timeStarted','authorUID'和'TID')

所以,这个阵列现在处于混乱状态,我需要将它组织到$ searchResults [1]将是最高'得分',[2]将是第二高等等。我看了array_multisort on php.net但很快失去了它的工作方式。那么我如何按照数字顺序(重新排列键)对$ searchResults进行排序,以另一个维度'sort'的降序作为排序机制降序?确实没有任何代码可以使用它,但是如果你需要一个数组外观的布局,你可以去:

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分: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