PHP array: count or sizeof?

后端 未结 8 885
慢半拍i
慢半拍i 2020-11-30 21:27

To find the number of elements in a PHP $array, which is faster/better/stronger?

count($array) or sizeof($array) ?

Ed

相关标签:
8条回答
  • 2020-11-30 22:03

    I would use count() if they are the same, as in my experience it is more common, and therefore will cause less developers reading your code to say "sizeof(), what is that?" and having to consult the documentation.

    I think it means sizeof() does not work like it does in C (calculating the size of a datatype). It probably made this mention explicitly because PHP is written in C, and provides a lot of identically named wrappers for C functions (strlen(), printf(), etc)

    0 讨论(0)
  • 2020-11-30 22:09

    sizeof() is just an alias of count() as mentioned here

    http://php.net/manual/en/function.sizeof.php

    0 讨论(0)
  • 2020-11-30 22:11

    I know this is old but just wanted to mention that I tried this with PHP 7.2:

    <?php
    //Creating array with 1 000 000 elements
    $a = array();
    for ($i = 0; $i < 1000000; ++$i)
    {
        $a[] = 100;
    }
    
    //Measure
    $time = time();
    for ($i = 0; $i < 1000000000; ++$i)
    {
        $b = count($a);
    }
    print("1 000 000 000 iteration of count() took ".(time()-$time)." sec\n");
    
    $time = time();
    for ($i = 0; $i < 1000000000; ++$i)
    {
        $b = sizeof($a);
    }
    print("1 000 000 000 iteration of sizeof() took ".(time()-$time)." sec\n");
    ?>
    

    and the result was:

    1 000 000 000 iteration of count() took 414 sec
    1 000 000 000 iteration of sizeof() took 1369 sec
    

    So just use count().

    0 讨论(0)
  • 2020-11-30 22:14

    Both are used to count elements in a array. sizeof() function is an alias of count() function used in PHP. However, count() function is faster and butter than sizeof().

    0 讨论(0)
  • 2020-11-30 22:16

    According to phpbench:

    Is it worth the effort to calculate the length of the loop in advance?

    //pre-calculate the size of array
    $size = count($x); //or $size = sizeOf($x);
    
    for ($i=0; $i<$size; $i++) {
        //...
    }
    
    //don't pre-calculate
    for ($i=0; $i<count($x); $i++) { //or $i<sizeOf($x);
        //...
    }
    

    A loop with 1000 keys with 1 byte values are given.

                      +---------+----------+
                      | count() | sizeof() |
    +-----------------+---------+----------+
    | With precalc    |     152 |      212 |
    | Without precalc |   70401 |    50644 |
    +-----------------+---------+----------+  (time in µs)
    

    So I personally prefer to use count() instead of sizeof() with pre calc.

    0 讨论(0)
  • 2020-11-30 22:19

    According to the website, sizeof() is an alias of count(), so they should be running the same code. Perhaps sizeof() has a little bit of overhead because it needs to resolve it to count()? It should be very minimal though.

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