ae.*_*ae. 3 php string performance boolean
我正在尝试优化PHP应用程序中的特定函数,并愚蠢地假设'if'语句中的布尔查找比字符串比较更快.但为了检查它,我使用microtime进行了一个简短的测试(见下文).令我惊讶的是,字符串查找更快.
我的测试有什么问题(我连接太多咖啡了,所以我对自己的代码有疑问)?如果没有,我会对PHP中有关字符串与布尔查找的任何评论感兴趣.
第一次测试(布尔查找)的结果是0.168秒.
第二次测试(字符串查找)的结果是0.005秒.
<?php
$how_many = 1000000;
$counter1 = 0;
$counter2 = 0;
$abc = array('boolean_lookup'=>TRUE, 'string_lookup'=>'something_else');
$start = microtime();
for ($i = 0; $i < $how_many; $i++)
{
if ($abc['boolean_lookup'])
{
$counter1++;
}
}
echo ($start - microtime());
echo '<hr>';
$start = microtime();
for ($i = 0; $i < $how_many; $i++)
{
if ($abc['string_lookup'] == 'something_else')
{
$counter2++;
}
}
echo ($start - microtime());
Run Code Online (Sandbox Code Playgroud)
是的,你喝的咖啡太多了.你需要使用microtime(true)否则你的日期计算工作在几毫秒但完全忽略秒.此外,使用当前时间 - 开始时间来测量持续时间,而不是开始时间 - 当前时间,否则您将得到负时间.请尝试以下代码:
<?php
$how_many = 5000000;
$counter1 = 0;
$counter2 = 0;
$abc = array('boolean_lookup'=>TRUE, 'string_lookup'=>'something_else');
$start = microtime(true);
for($i = 0; $i < $how_many; $i++)
{
if($abc['boolean_lookup'])
{
$counter1++;
}
}
echo "FIRST: ", (microtime(true) - $start), "\n";
$start = microtime(true);
for($i = 0; $i < $how_many; $i++)
{
if($abc['string_lookup'] == 'something_else')
{
$counter2++;
}
}
echo "SECOND: ", (microtime(true) - $start), "\n";
Run Code Online (Sandbox Code Playgroud)