首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 查找數值陣列不重複的最大/最小 Top 10 數字

     編輯:PHP 綜合知識

需求:從大量數值中找出去重後的最大 10 個與最小 10 個。本文示範 array_unique() + sort()/rsort() + array_slice() 組合解法。

核心程式碼

// 1. 產生 10,000 個 1-100,000 隨機數
$data = [];
for ($i = 0; $i < 10000; $i++) $data[] = rand(1, 100000);

// 2. 去重 → 升序排序
$data = array_unique($data);
sort($data); // 升序,最小在前

// 3. 取最小 10
$min10 = array_slice($data, 0, 10);

// 4. 取最大 10(從尾部取 10 個再倒序)
$max10 = array_slice($data, -10, 10);
rsort($max10); // 降序,最大在前

// 5. 輸出
echo "最小 10:\n"; print_r($min10);
echo "最大 10:\n"; print_r($max10);

輸出範例

最小 10:
Array ( [0] => 16 [1] => 19 [2] => 22 [3] => 31 [4] => 40 [5] => 49 [6] => 71 [7] => 74 [8] => 80 [9] => 92 )

最大 10:
Array ( [0] => 99997 [1] => 99991 [2] => 99973 [3] => 99958 [4] => 99955 [5] => 99946 [6] => 99939 [7] => 99933 [8] => 99927 [9] => 99900 )

關鍵函式對照

進階:單次遍歷找 Top-K(不排序全量)

資料量極大(億級)無法排序時,使用最小堆/最大堆維護大小為 K 的結構,時間複雜度 O(n log k),空間 O(k)。PHP 可用 SplMinHeap/SplMaxHeap 實作:

function topKMin($data, $k) {
    $heap = new SplMaxHeap(); // 最大堆保存最小的 k 個
    foreach ($data as $v) {
        if ($heap->count() < $k) $heap->insert($v);
        elseif ($v < $heap->top()) { $heap->extract(); $heap->insert($v); }
    }
    $result = []; foreach ($heap as $v) $result[] = $v; return array_reverse($result);
}

適用場景選擇

函式作用
array_unique()移除重複值,保留首次出現的鍵
sort()升序排序,重設數字鍵 0..n-1
rsort()降序排序,重設數字鍵
array_slice($arr, -10, 10)從陣列末尾向前取 10 個元素

根據實際資料規模選擇最適合的演算法,避免過度優化或效能不足。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
資料量推薦方法
< 100 萬array_unique + sort + slice(最簡單、效能足夠)
100 萬 - 1 億資料庫 GROUP BY + ORDER BY + LIMIT
> 1 億 / 串流堆/選擇算法 / 近似算法