PHP中的数组排序/搜索技术

时间:2010-09-08 15:04:13

标签: php arrays sorting

我有一个数组,让我们说$array = array(2, 1, 8, 3, 6, 0, 10, 10),我希望获得该数组的第二大值。 哪种分类/搜索技术最佳&我该怎么用呢?

3 个答案:

答案 0 :(得分:6)

我只是从您的数组中删除重复项(使用array_unique),然后使用rsort(使用Quicksort)和SORT_NUMERIC标记从数字上进行排序从最高到最低:

$array = array(2, 1, 8, 3, 6, 0, 10, 10);
$unique_array = array_unique($array);
rsort($unique_array, SORT_NUMERIC);
$second_highest = $unique_array[1];  // will be 8

PHP手册有comparison of sorting techniques

答案 1 :(得分:3)

这样的东西?

$array = array(2, 1, 8, 3, 6, 0, 10, 10);
rsort($array);

echo $array[1]; // 10

这反向对数组进行排序,然后输出第二个元素。

编辑:如果您想要第二高的唯一值,只需添加一个array_unique调用:

$array = array(2, 1, 8, 3, 6, 0, 10, 10);
$array = array_unique($array);
rsort($array);

echo $array[1]; // 8

答案 2 :(得分:3)

你可以使用rsort,但它会做很多不需要的额外操作(快速排序有O(logn)复杂度)。 如果你只传递一次这样的数组(O(n)):

,可能要快得多
$largest=$array[0];
$secondLargest=null; //none present, by default
foreach($array as $value)
  if($value>$largest)
  {
    $secondLargest=$largest;
    $largest=$value;
  }

在大型阵列上它会明显加快,但只有当你想要第一个,第二个,也许是第三大元素时它才会好。在所有其他情况下,对数组进行排序并动态获取第N个最大元素会更合理。