Ben
Ben

Reputation: 57209

PHP array: count or sizeof?

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

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

Edit

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

Answers (7)

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

Spoody
Spoody

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

Kashif Solangi
Kashif Solangi

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

Andy Groff
Andy Groff

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

Mina Ragaie
Mina Ragaie

Reputation: 477

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

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

Upvotes: 8

Andy Lester
Andy Lester

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

alex
alex

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

Related Questions