首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP加速for循环进行排名

PHP加速for循环进行排名
EN

Stack Overflow用户
提问于 2017-09-29 21:38:54
回答 1查看 78关注 0票数 0

我们目前正在开发一个锦标赛平台。这个平台确实生成了完全动态的排名,所以我们每次都有不同的分数,不同数量的参与者等。

一场锦标赛可以有多轮。对于每一轮,管理员可以设置参与者的排名。这就是问题所在。我当前的代码:

代码语言:javascript
复制
<select name="round_{{ $i }}_placements[{{ $participant->id }}]" class="form-control scoreboard-placement">
 @for($x=0;$x<$tournament->checkedin()->count()+1;$x++)
  <option value="{{ $x }}" @if($participant->getRanking($i)->ranking_value == $x) selected="selected" @endif>{{ $x }}</option>
 @endfor
</select>

但是我现在确实有一个关于加载时间的大问题:

在我的上一个案例中,我有67个参与者。对于每个参与者,他都通过并添加了所有这67个选择选项。但它也检查了67次排名,这显然不应该发生。这会使我们的后台加载时间增加到近30秒,这是非常巨大的。当我移除它们时,它又回到了2。

因此,我想要的是:一次创建所有选项,并自动更改选定的框。你们知道我是怎么做到的吗?切换到JS进行更改也不成问题。

EN

回答 1

Stack Overflow用户

发布于 2017-09-29 21:43:45

您应该执行$trnmntCheckedinCount = $tournament->checkedin()->count()并在循环中使用它。现在,每个条目调用一次这些方法(即67次)。我的建议只做了一次,它应该会有一些影响。

您可以检查人员排名是否为每个用户、每个选项的$x (因此,有67个参与者的10个选项意味着670次检查)。你应该在options for之前检查用户的排名,并且只检查所说的变量。这应该很重要:)

我的laravel几乎不存在,但像这样:

代码语言:javascript
复制
@php
// Place this out of the loop which loops through your users
$tournementCount = $tournament->checkedin()->count();
@endphp

<select name="round_{{ $i }}_placements[{{ $participant->id }}]" class="form-control scoreboard-placement">
    @php
        $participantRanking = $participant->getRanking($i)->ranking_value;
    @endphp

    @for($x=0; $x<$tournementCount+1; $x++)
        <option value="{{ $x }}" @if( $participantRanking == $x ) selected @endif>{{ $x }}</option>
    @endfor
</select> 
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46490038

复制
相关文章

相似问题

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