Getting the first character of a string with $str[0]

前端 未结 9 1073
余生分开走
余生分开走 2020-11-28 21:04

I want to get the first letter of a string and I\'ve noticed that $str[0] works great. I am just not sure whether this is \'good practice\', as that notation is

相关标签:
9条回答
  • 2020-11-28 21:58

    Speaking as a mere mortal, I would stick with $str[0]. As far as I'm concerned, it's quicker to grasp the meaning of $str[0] at a glance than substr($str, 0, 1). This probably boils down to a matter of preference.

    As far as performance goes, well, profile profile profile. :) Or you could peer into the PHP source code...

    0 讨论(0)
  • 2020-11-28 22:04

    I've used that notation before as well, with no ill side effects and no misunderstandings. It makes sense -- a string is just an array of characters, after all.

    0 讨论(0)
  • 2020-11-28 22:07

    It'll vary depending on resources, but you could run the script bellow and see for yourself ;)

    <?php
    $tests = 100000;
    
    for ($i = 0; $i < $tests; $i++)
    {
        $string = md5(rand());
        $position = rand(0, 31);
    
        $start1 = microtime(true);
        $char1 = $string[$position];
        $end1 = microtime(true);
        $time1[$i] = $end1 - $start1;
    
        $start2 = microtime(true);
        $char2 = substr($string, $position, 1);
        $end2 = microtime(true);
        $time2[$i] = $end2 - $start2;
    
        $start3 = microtime(true);
        $char3 = $string{$position};
        $end3 = microtime(true);
        $time3[$i] = $end3 - $start3;
    }
    
    $avg1 = array_sum($time1) / $tests;
    echo 'the average float microtime using "array[]" is '. $avg1 . PHP_EOL;
    
    $avg2 = array_sum($time2) / $tests;
    echo 'the average float microtime using "substr()" is '. $avg2 . PHP_EOL;
    
    $avg3 = array_sum($time3) / $tests;
    echo 'the average float microtime using "array{}" is '. $avg3 . PHP_EOL;
    ?>
    

    Some reference numbers (on an old CoreDuo machine)

    $ php 1.php 
    the average float microtime using "array[]" is 1.914701461792E-6
    the average float microtime using "substr()" is 2.2536706924438E-6
    the average float microtime using "array{}" is 1.821768283844E-6
    
    $ php 1.php 
    the average float microtime using "array[]" is 1.7251944541931E-6
    the average float microtime using "substr()" is 2.0931363105774E-6
    the average float microtime using "array{}" is 1.7225742340088E-6
    
    $ php 1.php 
    the average float microtime using "array[]" is 1.7293763160706E-6
    the average float microtime using "substr()" is 2.1037721633911E-6
    the average float microtime using "array{}" is 1.7249774932861E-6
    

    It seems that using the [] or {} operators is more or less the same.

    0 讨论(0)
提交回复
热议问题