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().

Ответ 7

Пожалуйста, используйте функцию count. Вот пример, как подсчитать массив в элементе

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

Функция count() возвращает количество элементов в массиве.

Функция sizeof() возвращает количество элементов в массиве.

Функция sizeof() является псевдонимом функции count().