PHP数组:count或sizeof?


216

要查找PHP中的元素数量$array,哪个更快/更好/更强?

count($array)还是sizeof($array)

编辑

多亏了安迪·莱斯特(Andy Lester),我才从多语言角度细化了我的问题。人工评论者说

“ [sizeof]在基于C的许多其他语言中并不相同”

这是真的?


72
一个Daft Punk的参考... :)

2
非常好的问题。但是这里有个不错的基准站点,它说sizeof仅仅快了
21µs

Answers:


191

我会使用count()它们是否相同的方法,因为根据我的经验,这是更常见的方法,因此会导致更少的开发人员阅读您的代码时说“ sizeof(),那是什么?”。并且必须查阅文档。

我认为这意味着sizeof()不能像在C中那样工作(计算数据类型的大小)。它可能使这个明确提到由于PHP是用C语言编写,并提供了大量具有相同名称的包装为C函数(strlen()printf(),等)


92

根据phpbench

预先计算循环的长度值得吗?

//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);
    //...
}

给出了一个具有1000个键和1个字节值的循环。

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

所以我个人更喜欢在pre calc中使用count()而不是sizeof()


3
请仅告诉您花费更少的时间。否则答案也相当复杂和令人困惑!谢谢
Pratik

6
您正在测试哪个版本的php?新版本有很多的优化的可能使这些结果完全不同
约翰·亨特

4
为什么sizeof更快而不保存结果到变量中,但是反之则相反?这是php解释器中不好的设计选择,会导致某种选择性的开销吗?我想知道您是如何进行基准测试的,微秒测量使我感到担忧。也许尝试在外部for循环中运行大量时间?
FluorescentGreen

1
“预计算”是什么意思?
rubo77 '19

1
@ rubo77参见上面的代码;“预计算”是在for循环之前确定一次数组的大小。如果没有“预计


19

根据该网站,sizeof()是的别名count(),因此它们应运行相同的代码。也许sizeof()有一点点开销,因为它需要解决count()?虽然应该很小。


53
好吧,很抱歉猜测?我只是说他们实际上是同一回事。然后,我做出了逻辑推断,即为函数而不是实际函数使用别名可能会变得非常慢,但是他承认我真的不知道,以“也许”作为前缀。对不起,如果那冒犯了你。也许下次我会使用“无穷小”这个词。
安迪·格洛夫

8

我知道这很旧,但只想提及在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");
?>

结果是:

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

所以就用吧count()


这是有趣的。您使用哪个PHP版本?
waza

@waza我正在使用PHP 7.2
Mehdi Bounya

1
使用PHP 7.3.3: 1 000 000 000 iteration of count() took 525 sec 1 000 000 000 iteration of sizeof() took 1361 sec
AnthonyB


-2

请使用count函数,这是一个如何对元素中的数组进行计数的示例

$cars = array("Volvo","BMW","Toyota");
echo count($cars);

count()函数返回数组中元素的数量。

sizeof()函数返回数组中元素的数量。

sizeof()函数是该函数的别名count()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.