首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询耗时过长

查询耗时过长
EN

Stack Overflow用户
提问于 2020-05-31 09:24:00
回答 1查看 67关注 0票数 0

我有下面的代码,需要25秒才能在屏幕上显示数据。

关于如何用isset代替in_array,你有什么想法吗?

我认为这可以快得多!

代码语言:javascript
复制
if (!$matches[0]['match_id']) $matches = array();

for ($i=0; $i<count($matches); $i++) {

    if (in_array($matches[$i]['match_id'],$validMatches)) {

    $match_stats = $db->get_by_fields('player_match_stats', array('match_id'=>$matches[$i]['match_id'], 'player_id'=>$pid));
        if($match_stats['points']!='') $ret[0]++;
        $ret[1] = $ret[1] + $match_stats['points'];
        $ret[2] = $ret[2] + $match_stats['threepoints'];
    }
}

if ($ret[0] != 0) {
    $ret[3] = $ret[1] / $ret[0];
    $ret[3] = number_format($ret[3], 1);
}

return $ret;
EN

回答 1

Stack Overflow用户

发布于 2020-05-31 11:53:37

以下是我的几点心得:

  1. 不要在for循环中使用计数。它在每次迭代时都会计算长度。如果您有数组,请改用foreach。
  2. 在循环之前使用array_intersectmatches数组中检索所有有效的匹配项。
  3. 删除查询外部的循环,并使用WHERE id IN (12,13,15,16,...,77)一次性检索数据库中的所有记录。然后迭代您的结果。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62110519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档