Reputation: 57209
To find the number of elements in a PHP $array
, which is faster/better/stronger?
count($array)
or sizeof($array)
?
Thanks to Andy Lester, I have refined my question to mean from a multilingual perspective. The manual commenters say
"[sizeof] does not mean the same in many other languages based on C"
Is this true?
Upvotes: 275
Views: 192473
Reputation: 5695
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.
Upvotes: 117
Reputation: 2882
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()
.
UPDATE:
On PHP 8.3 the speed is identical:
1 000 000 000 iteration of count() took 10 sec
1 000 000 000 iteration of sizeof() took 10 sec
Upvotes: 16
Reputation: 928
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 better than sizeof().
Upvotes: -2
Reputation: 2670
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.
Upvotes: 24
Reputation: 477
sizeof()
is just an alias of count()
as mentioned here
http://php.net/manual/en/function.sizeof.php
Upvotes: 8
Reputation: 93636
They are identical according to sizeof()
In the absence of any reason to worry about "faster", always optimize for the human. Which makes more sense to the human reader?
Upvotes: 44
Reputation: 490163
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)
Upvotes: 235