You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对数组排序后仅取出前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 07:39:01