1

我需要一些帮助以在 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";
?>

抱歉,如果有人用几句话不理解我的任务,我在问我怎样才能更快地做到这一点,有没有人有任何提示?

4

3 回答 3

2

首先要做的是使用 else ,这样您就不会每次都执行每个测试。即,如果你这样做:

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

然后 PHP 必须每次都对每个条件执行检查。如果您知道条件 1 不包括条件 2,请执行以下操作:

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

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

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

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

于 2012-11-01T18:15:16.090 回答
2

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

许多旧 libcs​​ 的随机数生成器具有可疑或未知的特性并且速度很慢。默认情况下,PHP 使用带有 rand() 函数的 libc 随机数生成器。mt_rand() 函数是它的替代品。它使用具有已知特性的随机数生成器,使用 » Mersenne Twister,生成随机数的速度比 libc rand() 提供的平均速度快四倍

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

我不确定你在这里寻求什么样的优化,并想重申弗兰克法默在讨论中的评论:

为什么您如此关注此特定操作的速度?你有简介吗?您希望通过选择一个而不是另一个来节省多少时间?...请允许我更直接一点:这并没有什么意义。我们正在谈论以纳秒为单位的差异

于 2012-11-01T18:14:27.557 回答
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 调用此脚本的开销。这种开销会降低游戏的性能,并给服务器带来负载。

于 2012-11-01T18:21:56.020 回答