Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组:count还是sizeof?_Php - Fatal编程技术网

PHP数组:count还是sizeof?

PHP数组:count还是sizeof?,php,Php,要查找PHP$array中的元素数,哪个更快/更好/更强 count($array)或sizeof($array) 编辑 多亏了安迪·莱斯特,我从多语言的角度将我的问题提炼成了一个意思。手册评论员说 “[sizeof]在中的含义不同 许多其他基于C的语言” 这是真的吗?根据该网站,sizeof()是count()的别名,因此它们应该运行相同的代码。也许sizeof()有一点开销,因为它需要将其解析为count()?但是应该是非常小的。根据不同的标准,它们是相同的 在没有任何理由担心“更快”的情况

要查找PHP
$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