如何对数组排序后仅取出前5条最新的文章数据?
PHP 从数组中提取最新5篇文章的实现方案
- 如果你处理的数组规模不大(千级及以下元素),直接排序后用内置
array_slice截取即可,不需要自己遍历存储新数组,性能足够且代码最简洁:
// 按创建时间降序排序 usort($articles, function ($item1, $item2) { return $item2['created_at'] <=> $item1['created_at']; }); // 直接截取前5条,array_slice为C实现的内置函数,性能远高于PHP层面的循环逻辑 $latestArticles = array_slice($articles, 0, 5);
- 如果数组规模很大(万级及以上元素),全排序会造成不必要的性能浪费,可以用最小堆实现O(n)复杂度的提取,不需要全排序:
$k = 5; $heap = new SplMinHeap(); foreach ($articles as $item) { if ($heap->count() < $k) { $heap->insert($item); continue; } // 对比堆顶(当前已选最小的时间),比堆顶新就替换 $top = $heap->top(); if ($item['created_at'] > $top['created_at']) { $heap->extract(); $heap->insert($item); } } // 转为数组后降序排序得到最终结果,仅需要对5个元素排序,性能损耗可以忽略 $latestArticles = iterator_to_array($heap); usort($latestArticles, fn($a, $b) => $b['created_at'] <=> $a['created_at']);
常规业务场景下优先选第一种方案,代码可读性高、维护成本低,只有在数组元素量级足够大时才需要考虑第二种优化方案。
内容的提问来源于stack exchange,提问作者harunB10
相关产品推荐
相关产品推荐

