PHP数组:count还是sizeof?
要查找PHPPHP数组:count还是sizeof?,php,Php,要查找PHP$array中的元素数,哪个更快/更好/更强 count($array)或sizeof($array) 编辑 多亏了安迪·莱斯特,我从多语言的角度将我的问题提炼成了一个意思。手册评论员说 “[sizeof]在中的含义不同 许多其他基于C的语言” 这是真的吗?根据该网站,sizeof()是count()的别名,因此它们应该运行相同的代码。也许sizeof()有一点开销,因为它需要将其解析为count()?但是应该是非常小的。根据不同的标准,它们是相同的 在没有任何理由担心“更快”的情况
$array
中的元素数,哪个更快/更好/更强
count($array)
或sizeof($array)
编辑
多亏了安迪·莱斯特,我从多语言的角度将我的问题提炼成了一个意思。手册评论员说
“[sizeof]在中的含义不同
许多其他基于C的语言”
这是真的吗?根据该网站,
sizeof()
是count()
的别名,因此它们应该运行相同的代码。也许sizeof()
有一点开销,因为它需要将其解析为count()
?但是应该是非常小的。根据不同的标准,它们是相同的
在没有任何理由担心“更快”的情况下,始终为人类优化。哪一个对人类读者更有意义?如果它们相同,我会使用count()
,因为在我的经验中,这更常见,因此会导致阅读您的代码的开发人员更少地说“sizeof()
,这是什么?”并且必须查阅文档
我认为这意味着sizeof()
不像在C(计算数据类型的大小)中那样工作。它可能明确提到这一点,因为PHP是用C编写的,并且为C函数提供了许多同名的包装器(strlen()
,printf()
,等等),根据:
是否值得提前计算环路的长度
//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);
//...
}
所以我个人更喜欢在预计算中使用count()而不是sizeof()。sizeof()
只是count()的别名
如前所述
请使用计数函数,下面是一个如何对元素中的数组进行计数的示例
$cars = array("Volvo","BMW","Toyota");
echo count($cars);
函数的作用是:返回数组中元素的数目
函数的作用是:返回数组中的元素数
sizeof()
函数是count()
函数的别名 我知道这很老了,但我只想提一下PHP7.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");
?>
因此,只需使用count()
这两种方法就可以对数组中的元素进行计数。sizeof()函数是PHP中使用的count()函数的别名。但是,count()函数比sizeof()更快更好。一个愚蠢的朋克引用…:)很好的问题。但这里有一个很好的基准站点,它说sizeof只是一个21µs的快速程序,抱歉猜测一下?我只是说他们其实是一回事。然后,我做了一个逻辑推断,用别名代替实际函数可能会稍微慢一点,但我承认我真的不知道用“也许”这个词开头。如果这冒犯了你,我很抱歉。也许下次我会用“无穷小”这个词。请告诉我哪一个花费的时间更少。否则答案也相当复杂和混乱!谢谢你用什么版本的php进行测试?较新的版本有很多优化,这可能会使这些结果非常不同。为什么sizeof更快,而不将其结果保存到变量中,但其他情况则相反?这是不是php解释器中的一些糟糕的设计选择导致了某种选择性的开销?我想知道你是如何进行基准测试的,微秒测量让我担心。也许可以尝试在一个外部for循环中大量运行它?你说的“pre-calc”是什么意思?@rubo77查看上面的代码;“预计算”是在for循环之前确定一次数组的大小。如果不使用“pre-calc”,则会确定for循环中数组的大小。我看到两个链接。你以为他会重写sizeof吗?哈哈:这很有趣。你用的是什么PHP版本?@waza我用的是PHP7.2和PHP7.3.3:10000000次count()迭代耗时525秒
10000000次sizeof()迭代耗时1361秒
用PHP7.0和ubuntu机器10000000次count()迭代耗时38秒10000000次sizeof()迭代耗时46秒
1 000 000 000 iteration of count() took 414 sec
1 000 000 000 iteration of sizeof() took 1369 sec