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

如何优化Twitter用户数据统计代码并按重复次数降序排序

嘿,你的代码思路其实挺清晰的,已经能完美实现需求啦!不过确实可以优化得更简洁,排序的问题也很好解决,我来一步步给你拆解:

一、优化数据存储的写法

你原来的逻辑没问题,但可以通过提取重复变量、简化判断逻辑让代码更整洁高效:

$vector = [];
foreach($statuses as $status) {
    // 先把重复调用的对象属性提取成变量,减少重复访问,代码更易读
    $screenName = $status->retweeted_status->user->screen_name;
    $profileImg = str_replace('_normal','_400x400',$status->retweeted_status->user->profile_image_url_https);
    
    // 当用户不存在时初始化数据,计数先设为0
    if (!isset($vector[$screenName])) {
        $vector[$screenName] = [
            'img' => $profileImg,
            'cont' => 0
        ];
    }
    // 统一执行计数累加,避免在分支里重复写赋值逻辑
    $vector[$screenName]['cont']++;
}

这里有两个小优化点:

  • 把重复访问的$status->retweeted_status->user相关属性提取成变量,减少对象属性的重复调用,既提升可读性,也能稍微提高性能。
  • 用isset()替代array_key_exists(),在这个场景下两者效果一致,但isset()的执行效率更高,因为它会同时检查键存在且值不为null,而我们的场景里只有键不存在时才初始化,完全适用。
二、按出现次数降序排序

要对数组按cont字段从多到少排序,因为我们需要保留用户名作为数组键,所以要用uasort()函数(它会保持数组的关联关系):

PHP7+版本(推荐)

可以用太空船运算符(<=>)来简化排序逻辑,代码非常直观:

uasort($vector, function($a, $b) {
    // $b在前表示降序,$a在前则是升序
    return $b['cont'] <=> $a['cont'];
});

PHP5兼容版本

如果你的环境还在使用PHP5,就用传统的比较逻辑:

uasort($vector, function($a, $b) {
    if ($a['cont'] === $b['cont']) {
        return 0;
    }
    // 返回1表示$a排在$b后面,返回-1则相反,这里实现降序
    return $a['cont'] < $b['cont'] ? 1 : -1;
});

排序完成后,$vector数组就会按照用户出现次数从多到少排列了。

内容的提问来源于stack exchange,提问作者Sebastian Ospina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:42:36