PHP-массив: count или sizeof?
Чтобы найти количество элементов в PHP $array
, которое быстрее/лучше/сильнее?
count($array)
или sizeof($array)
?
Изменить
Благодаря Энди Лестеру, я уточнил свой вопрос, имея в виду многоязычную перспективу. Авторизаторы говорят
"[sizeof] не означает то же самое в многие другие языки на основе C"
Это правда?
Ответы
Ответ 1
Я бы использовал count()
, если они будут такими же, как в моем опыте, это более распространено, и поэтому заставит меньше разработчиков читать ваш код, чтобы сказать "sizeof()
, что это?" и необходимо проконсультироваться с документацией.
Я думаю, что это означает, что sizeof()
не работает, как в C (вычисление размера типа данных). Вероятно, это явно упоминало это, потому что PHP написан на C и предоставляет множество идентично названных оболочек для функций C (strlen()
, printf()
и т.д.)
Ответ 2
Согласно 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 ключами с однобайтовыми значениями.
+---------+----------+
| count() | sizeof() |
+-----------------+---------+----------+
| With precalc | 152 | 212 |
| Without precalc | 70401 | 50644 |
+-----------------+---------+----------+ (time in µs)
Поэтому я лично предпочитаю использовать count() вместо sizeof() с pre calc.
Ответ 3
Они идентичны в соответствии с sizeof()
В отсутствие каких-либо причин беспокоиться о "быстрее", всегда оптимизируйте для человека. Что имеет смысл для читателя?
Ответ 4
Согласно веб-сайту, sizeof()
является псевдонимом count()
, поэтому они должны работать с одним и тем же кодом. Возможно, sizeof()
имеет немного накладных расходов, потому что ему нужно разрешить его count()
? Это должно быть очень минимальным, хотя.
Ответ 5
Я знаю, что это старый, но просто хотел упомянуть, что я пробовал это с 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()
.
Ответ 6
sizeof()
является просто псевдонимом count()
как упоминалось здесь
http://php.net/manual/en/function.sizeof.php
Ответ 7
Пожалуйста, используйте функцию count. Вот пример, как подсчитать массив в элементе
$cars = array("Volvo","BMW","Toyota");
echo count($cars);
Функция count()
возвращает количество элементов в массиве.
Функция sizeof()
возвращает количество элементов в массиве.
Функция sizeof()
является псевдонимом функции count()
.