Sizeof PHP: размер массивов и объектов, уменьшение времени выполнения скриптов

Функция sizeof в php является псевдонимом count(), как и count(), получает количество "ключ - значение" массива или объекта. Обязательным параметром является массив или объект, необязательным - второе значение COUNT_RECURSIVE, или 1 (по умолчанию - 0), если установлен, то считает рекурсивно.

PHP: как сократить количество итераций в цикле и уменьшить время выполнения скрипта?

Так как count() и sizeof php используются в циклах очень часто, то следует изучить их досконально.

$array = array(
	"fruit" =>array(
		"apple", 
		"bananas",
		"orange",
	),
	"vegetables" =>array(
		"potatoes", 
		"tomatoes",
	),
);

echo "По умолчанию = ".sizeof($array); //По умолчанию = 2
echo "Рекурсивно  = ".sizeof($array, 1); //Рекурсивно = 7 

Тестирование больших массивов в цикле (более 65000 элементов) показало, что sizeof() быстрее, чем count(), поэтому имеет смысл применять ее на практике.

В циклах всегда лучше sizeof php заменить на переменную, потому что иначе размер массива будет определяться в каждой итерацией, что замедляет процесс.

$test = array( 1, 2, 3, 4 );
$sizeof_test = sizeof( $test );
for ( $it=0; $it < $sizeof_test; $it++ ) { 
	echo $test[$it];
}

Если протестировать цикл на 1000 однобайтных значениях, то время его прохождения с предустановленной переменной меньше в 250 раз.

Рассмотрим массив с нулевыми значениями:

$test2 = array( '', null, false, 0 );
var_dump( sizeof( $test2 ) ); //выведет int(4)
var_dump( sizeof( array_filter( $test2 ) ) ); //выведет int(0)

Как видно из примера, sizeof php (и count тоже), считают количество элементов, в том числе и нулевые, поэтому нужно это учитывать и (если необходимо) удалять пустые значения с помощью array_filter или другой пользовательской функции.

Добавим массив в $test2:

$test2 = array( '',null,false,0, array() );       //выведет int(0)
$test2 = array( '',null,false,0, array( null ) ); //выведет int(1)
var_dump( sizeof( array_filter( $test2 ) ) );

В данном примере array_filter удалил все пустые значения одномерного массива, но эта функция не имеет рекурсивного действия, поэтому значение "null" "внутреннего" массива осталось, а значит sizeof php его учитывает.

Давайте посмотрим что будет, если убрать array_filter?

$test2 = array('', null, false, 0, array() );       //выведет int(5)
$test2 = array('', null, false, 0, array( null ) ); //выведет int(5)
$t_rec = array('', null, false, 0, array() );       //выведет int(5)
$t_rec = array('', null, false, 0, array( null ) ); //выведет int(6)
var_dump( sizeof( $test2 ) );
var_dump( sizeof( $t_rec, 1 ) );

Если пустые значения не были введены в код намеренно, то лучше от них избавиться с помощью функций-фильтров прежде, чем запускать цикл. Это уберет лишние итерации цикла и сократит время на выполнение процесса.

Sizeof PHP считает пустые значения массива

Как посчитать объект StdClass созданный из json_decode с помощью sizeof php?

$json = '{ "foo": "bar", "number": 10 , "car": "BMW" }';
$stdInstance = json_decode( $json );
var_dump( sizeof( ( array )$stdInstance ) ); //выведет int(3)
var_dump( sizeof( get_object_vars( $stdInstance ) ) ); //выведет int(3)

Sizeof() определяет количество элементов массива или объекта Countable. StdClass не является ни тем, ни другим. Чтобы получить объект в виде массива, используйте функцию get_object_vars. Первый вариант с (array) тоже работает, но все же второй вариант кажется более надежным.

Sizeof PHP StdClass из json_decode

Get_object_vars применяют для получения нестатических свойств объекта, что вполне подходит для нашего примера.

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.