在PHP中生成和检查数字的最快方法?

时间:2012-11-01 18:09:34

标签: php performance numbers

我需要帮助在PHP中生成数字,然后检查例如,如果该数字低于100,则给出0.1分。这适用于在使用Flash游戏中的某些操作时将被调用的硬币系统。

我想在尽可能最快的时间内完成这项工作,这里是我用来测试它的代码,然后再将其更新到游戏的主服务器。

<?php
$coins = 0;
$rand = rand(0, 1000);

if($rand < 50){
$coins = $coins + 0.01;
}

if($rand < 100 && $rand > 50){
$coins = $coins + 0.2;
}

if($rand > 100 && $rand < 200){
$coins = $coins + 0.2;
}

if($rand > 500){
$coins = $coins + 0.5;
}

echo "Generated $coins coins \n";
?>

很抱歉,如果有人不理解我的任务,我会问我怎样才能更快地完成这项工作?是否有人有任何提示?

3 个答案:

答案 0 :(得分:2)

请考虑使用mt_rand(),而不是rand()。来自文档:

  

许多旧libcs​​的随机数生成器有可疑或未知   特点而且很慢。默认情况下,PHP使用libc随机   带有rand()函数的数字生成器。 mt_rand()函数是一个   直接替代这个。它使用随机数生成器   已知的特征使用»Mersenne Twister,将会   产生随机数比平均libc快4倍   rand()提供

此外,这是讨论同一主题的另一个非常相似的主题:Fastest way to get random php number?

我不确定你在这里寻求什么样的优化,并且想重申Frank Farmer对该讨论的评论:

  

为什么你这么特别的操作如此关注速度?   你介绍过吗?你期望通过选择一个节省多少时间   在另一个? ......让我更直接:它不会成为一个   有意义的差异我们正在谈论衡量的差异   纳秒

答案 1 :(得分:2)

要做的第一件事就是使用else,这样你就不会每次都执行每个测试。即,如果你这样做:

if (condition1) ...
if (condition2) ...
if (condition3) ...

然后PHP必须每次都检查每个条件。如果您知道condition1排除了condition2,那么请执行以下操作:

if (condition1) ...
elseif (condition2) ...
elseif (condition3) ...

这样,您只能执行条件直到您实际获得匹配的位置。下一步是将最有可能成功的条件放在首位:

if ($rand > 500) ...
elseif ($rand > 100 && $rand < 200) ...

这样,有一半时间,你只做一次检查。

答案 2 :(得分:0)

如果您将比较链接在一起,则无需同时检查><

<?php
$coins = 0;
$rand = rand(0, 1000);

if( $rand > 500 ) {
    $coins += 0.5;
} else if( $rand > 200 ) {
    $coins += 0.4;
} else if( $rand > 100 ) {
    $coins += 0.3;
} else if( $rand > 50 ) {
    $coins += 0.2;
} else {
    $coins += 0.1;
}

echo "Generated $coins coins \n";

除非你要循环这个,或者你的原始代码每秒数百万次,否则我不会担心。

然而, 担心的是每次在Flash游戏中发生某些事情时,通过HTTP调用此脚本的开销。这种开销会降低游戏性能,并将负载放在服务器上。