boolの比較を少し調整したい場合があります。
if($ var)はブール比較ではありません(「文字列比較」と比較して)。
if($abc['boolean_lookup'] == TRUE)
またはif($abc['boolean_lookup'] === TRUE)
(2対3の等号)で再度試してみてください。
私はブール比較を含むテストを行い、3イコールサインの比較も同様に行いました。 さらに、ループを3回実行するループもあります。結果はさまざまな外部要因によって異なる場合があります。
スクリプトexcutionの合計時間がかなり長いので、私は$how_many = 5000000;
ここ
$how_many = 3000000;
にしlowereedてきたこの方法は、最終的なスクリプトです:
<?php
function DoTest(){
$how_many = 3000000;
$counter1 = 0;
$counter2 = 0;
$counter3 = 0;
$counter4 = 0;
$counter5 = 0;
$counter6 = 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 "GENERAL-IF ON A BOOL: ", (microtime(true) - $start)*10, "<br />\n";
$start = microtime(true);
for($i = 0; $i < $how_many; $i++){
if($abc['string_lookup']){
$counter2++;
}
}
echo "GENERAL-IF ON A STRING: ", (microtime(true) - $start)*10, "<br />\n";
$start = microtime(true);
for($i = 0; $i < $how_many; $i++){
if($abc['boolean_lookup'] == TRUE){
$counter3++;
}
}
echo "TWO-EQUALL-IF ON A BOOL : ", (microtime(true) - $start)*10, "<br />\n";
$start = microtime(true);
for($i = 0; $i < $how_many; $i++){
if($abc['string_lookup'] == 'something_else'){
$counter4++;
}
}
echo "TWO-EQUALL-IF ON A STRING : ", (microtime(true) - $start)*10, "<br />\n";
$start = microtime(true);
for($i = 0; $i < $how_many; $i++){
if($abc['boolean_lookup'] === TRUE){
$counter5++;
}
}
echo "THREE-EQUALL-IF ON A BOOL : ", (microtime(true) - $start)*10, "<br />\n";
$start = microtime(true);
for($i = 0; $i < $how_many; $i++){
if($abc['string_lookup'] === 'something_else'){
$counter6++;
}
}
echo "THREE-EQUALL-IF ON A STRING : ", (microtime(true) - $start)*10, "<br />\n";
}
$number_of_tests = 3;
for($i = 0; $i < $number_of_tests; $i++){
echo "<br />\n<br />\n== Test #".($i+1)."<br />\n";
DoTest();
}
?>
と結果:
== Test #1
GENERAL-IF ON A BOOL: 7.61245965958
GENERAL-IF ON A STRING: 7.49043941498
TWO-EQUALL-IF ON A BOOL : 8.92991065979
TWO-EQUALL-IF ON A STRING : 10.3996396065
THREE-EQUALL-IF ON A BOOL : 8.02039146423
THREE-EQUALL-IF ON A STRING : 9.25590991974
== Test #2
GENERAL-IF ON A BOOL: 7.74684906006
GENERAL-IF ON A STRING: 7.58201122284
TWO-EQUALL-IF ON A BOOL : 8.90240907669
TWO-EQUALL-IF ON A STRING : 10.2967596054
THREE-EQUALL-IF ON A BOOL : 8.08442115784
THREE-EQUALL-IF ON A STRING : 9.2577290535
== Test #3
GENERAL-IF ON A BOOL: 7.63362884521
GENERAL-IF ON A STRING: 7.5103187561
TWO-EQUALL-IF ON A BOOL : 8.92127037048
TWO-EQUALL-IF ON A STRING : 10.4210495949
THREE-EQUALL-IF ON A BOOL : 8.02319049835
THREE-EQUALL-IF ON A STRING : 9.25379991531
私の結論は、比較(等号付き)を実行すると、ブールが勝者であることに疑いはありません。
しかし、単純な一般的なif() - 文を実行すると、文字列はboolより早く返されます。
(すなわち。それは反対のことを検出するための時間がかかるのでしょうか?)
挨拶、 Krinkle
はあなたが望んでいないだろうがtrueまたはfalseを返すに差がある場合、私はチェックアウトするかもしれないいくつかの他の日microtime()を使用するには - $ start? $ start-microtime()は負でなければなりません。 – BaroqueBobcat