PHP string test and boolean

I am trying to optimize a specific function in a PHP application and it is foolish to assume that a boolean search in an "if" expression will be faster than string comparisons. But to test this, I put together a short test (see below) using microtime . To my surprise, string searching was faster.

Is there something wrong with my test (I am connected to too much coffee, so I am suspicious of my own code)? If not, I would be interested in any comments that people have around string and boolean queries in PHP.

The result for the first test (Boolean search) was 0.168 seconds.

The result for the second test (line search) was 0.005 seconds.

<?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());
+3
2

, . 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";
+6

, bool.

if ($ var) bool ( " " ).

if($abc['boolean_lookup'] == TRUE) if($abc['boolean_lookup'] === TRUE) (2 3 ).

, bool, .   , 3 , .

script , , $how_many = 5000000; $how_many = 3000000;

script:

<?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

, , ( ) bool , .

if() - , bool.

- , true false (.. ?)

, Krinkle

0

Source: https://habr.com/ru/post/1712635/


All Articles