Как лучше всего проверить что в массиве нет элементов?
Да все, в общем, корректны. Только в первом и четвертом случаях будет преобразование типа к bool, а третий подойдет только для индексных массивов. Есть еще вариант sizeof($arr) .
Отслеживать
20.5k 4 4 золотых знака 27 27 серебряных знаков 50 50 бронзовых знаков
ответ дан 20 мар 2012 в 8:20
14.7k 1 1 золотой знак 26 26 серебряных знаков 48 48 бронзовых знаков
ТРЕТИЙ — НЕ КОРРЕКТНЫЙ. Например, $a = [NULL]; — не пустой массив.
13 ноя 2017 в 2:22
Возможно, наилучший вариант if ($arr === Array())
Отслеживать
51.4k 86 86 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков
ответ дан 28 окт 2015 в 19:54
31 1 1 бронзовый знак
Постарайтесь писать более развернутые ответы. Поясните, на чем основано ваше утверждение?
29 окт 2015 в 13:08
ОТВЕТ:
Проверять пуст массив через функции count и sizeof — не стоит, так как он тратить время на обработку. мизерное время, но тратит.
Лучшие варианты это:
1. if($arr) // Проверит на наличие элементов внутри 2. if(empty( $arr )) // Проверит существование переменной с массивом и наличие элементов внутри 3. if(array_shift( $arr )) // Проверит наличие первого элемента 4. if($arr[0]) // Проверит на наличие нулевого элемента, для индексного массива, который начинается с 0
ИССЛЕДОВАНИЯ:
- Данные ответ проверен через микротест со сложным массивом, с 40014 элементов и PHP 7.1
- Исполнение скрипта происходило на локальной машине (Open Server 5.2).
- Замер происходил через функцию php microtime()
- Результат проверялся трижды
РЕЗУЛЬТАТЫ ИССЛЕДОВАНИЙ:
- if(count($arr)) : 0.0010001659393311 сек.
- if(sizeof($arr)) : 0 сек.
- if($array) : 0 сек.
- if(empty($arr)) : 0 сек.
- if(array_shift($arr)) : 0 сек.
- if($arr[0]) : 0 сек.
- if(count($arr)) : 0 сек.
- if(sizeof($arr)) : 0.0010011196136475 сек.
- if($array) : 0 сек.
- if(empty($arr)) : 0 сек.
- if(array_shift($arr)) : 0 сек.
- if($arr[0]) : 0 сек.
- if(count($arr)) : 0.00099992752075195 сек.
- if(sizeof($arr)) : 0 сек.
- if($array) : 0 сек.
- if(empty($arr)) : 0 сек.
- if(array_shift($arr)) : 0 сек.
- if($arr[0]) : 0 сек.
ЧТО Я ЮЗАЮ:
Для себя использую if($arr) <. >и if($arr[0]) <. >, так как нет необходимости вызывать дополнительные функции — обертки
Отслеживать
20.5k 4 4 золотых знака 27 27 серебряных знаков 50 50 бронзовых знаков
ответ дан 13 ноя 2017 в 2:02
29 1 1 бронзовый знак
П.3 какая-то бессмыслица
18 мар 2021 в 9:10
П.4 тоже бессмыслица. проверяет не наличие элемента, а его пустоту. [0] при такой проверке вернет что массив не имеет элементов
18 мар 2021 в 9:28
Более оптимальный так как:
- Код более читаемый — «Если переменная равна пустому массиву»;
- Сразу идет контроль типов, и вы действительно сравниваете массив;
- Не используются функции, а только сравнение, значит этот код будет работать немного быстрее;
Отслеживать
ответ дан 10 мая 2018 в 11:11
Alexey Pavlov Alexey Pavlov
11 2 2 бронзовых знака
В документации сказано, что массив без элементов интерпретируется как false. https://www.php.net/manual/ru/language.types.boolean.php#language.types.boolean.casting
var_dump((bool) array(12)); // bool(true) var_dump((bool) array()); // bool(false)
Вот я и убедился, что самый быстрый способ
if ( $arr ) <>
$arr = []; $a1000 = range(0, 1000); // 0,1,2. 1000 for( $i = 0; $i < 1000000; $i++) < $j = rand(0,20); if ( $j === 0 ) < $arr[] = []; >else < shuffle( $a1000 ); $arr[] = array_slice($a1000,0,$j); >> $t = microtime( true ); $n = count_not_empty1( $arr ); $t = microtime(true) - $t; echo 'if ( $a ): N='.$n.' T='.round($t*1000,4).' ms'.PHP_EOL; $t = microtime( true ); $n = count_not_empty2( $arr ); $t = microtime(true) - $t; echo 'if ( $a !== [] ): N='.$n.' T='.round($t*1000,4).' ms'.PHP_EOL; $t = microtime( true ); $n = count_not_empty3( $arr ); $t = microtime(true) - $t; echo 'if ( !empty($a) ): N='.$n.' T='.round($t*1000,4).' ms'.PHP_EOL; $t = microtime( true ); $n = count_not_empty4( $arr ); $t = microtime(true) - $t; echo 'if ( count($a) ): N='.$n.' T='.round($t*1000,4).' ms'.PHP_EOL; function count_not_empty1( &$arr ) < $n = 0; for( $i = 0; $i < 1000000; $i++ ) < if ( $arr[$i] ) < $n++; >> return $n; > function count_not_empty2( &$arr ) < $n = 0; for( $i = 0; $i < 1000000; $i++ ) < if ( $arr[$i] !== [] ) < $n++; >> return $n; > function count_not_empty3( &$arr ) < $n = 0; for( $i = 0; $i < 1000000; $i++ ) < if ( !empty($arr[$i]) ) < $n++; >> return $n; > function count_not_empty4( &$arr ) < $n = 0; for( $i = 0; $i < 1000000; $i++ ) < if ( count($arr[$i]) ) < $n++; >> return $n; >
if ( $a ): N=952522 T=117.7402 ms if ( $a !== [] ): N=952522 T=122.844 ms if ( !empty($a) ): N=952522 T=125.299 ms if ( count($a) ): N=952522 T=128.9139 ms
Как проверить пустой ли массив php

WordPress 6 с Нуля до Гуру
Этот курс научит Вас созданию самых разных сайтов на самой популярной в мире CMS — WordPress. Вы увидите установку и настройку локального сервера, разбор каждой настройки, каждой кнопки и каждого пункта меню в панели WordPress.
Также Вы получите и всю практику, поскольку прямо в курсе с нуля создаётся полноценный Интернет-магазин, который затем публикуется в Интернете. И всё это прямо на Ваших глазах.
Помимо уроков к курсу идут упражнения для закрепления материала.
И, наконец, к курсу идёт ценнейший Бонус по тому, как используя ChatGPT и создавая контент для сайта, можно выйти на пассивный доход. Вы наглядно увидите, как зарегистрироваться в ChatGPT (в том числе, и если Вы из России), как правильно выбрать тему для сайта, как правильно генерировать статьи для него(чтобы они индексировались поисковыми системами) и как правильно монетизировать трафик на сайте.
Уроки и статьи
Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.
![]()
Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.
![]()
Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.
![]()
Мой аккаунт Моя группа
Какая тема Вас интересует больше?
Бесплатный курс
33 шага к финансовой независимости
Данный курс представляет из себя чек-лист в PDF-формате с 33-мя последовательными шагами, пройдя которые Вы станете финансово независимым человеком. К этому чек-листу так же прилагается подробная видеоинструкция.
Чтобы получить Видеокурс,
заполните форму
Бесплатный онлайн-семинар
Как создать профессиональный Интернет-магазин
После семинара:
— Вы будете знать, как создать Интернет-магазин.
— Вы получите бесплатный подарок с подробным описанием каждого шага.
— Вы сможете уже приступить к созданию Интернет-магазина.
empty
Проверяет, считается ли переменная пустой. Переменная считается пустой, если она не существует или её значение равно false . Языковая конструкция empty() не генерирует предупреждение, если переменная не существует.
Список параметров
Если переменная не существует, предупреждение не генерируется. То есть конструкция empty() — это краткий эквивалент конструкции !isset($var) || $var == false.
Возвращаемые значения
Возвращает true , если переданная в параметр var переменная не существует, содержит пустое значение или равно нулю, то есть ложно, подробнее о приведении значений к булевым типам рассказано в параграфе преобразование в логический тип. В остальных случаях возвращает false .
Примеры
Пример #1 Простое сравнение языковых конструкций empty() и isset() .
// Принимает значение true, потому что переменная $var содержит пустое значение
if (empty( $var )) echo ‘$var или 0, или пусто, или вообще не определена’ ;
>
// Принимает значение true, потому что переменная $var определена
if (isset( $var )) echo ‘$var определена, даже если она пустая’ ;
>
?>
Пример #2 Конструкция empty() и строковые индексы
$expected_array_got_string = ‘somestring’ ;
var_dump (empty( $expected_array_got_string [ ‘some_key’ ]));
var_dump (empty( $expected_array_got_string [ 0 ]));
var_dump (empty( $expected_array_got_string [ ‘0’ ]));
var_dump (empty( $expected_array_got_string [ 0.5 ]));
var_dump (empty( $expected_array_got_string [ ‘0.5’ ]));
var_dump (empty( $expected_array_got_string [ ‘0 Mostel’ ]));
?>?php
Результат выполнения этого примера:
bool(true) bool(false) bool(false) bool(false) bool(true) bool(true)
Примечания
Замечание: Поскольку это языковая конструкция, а не функция, её нельзя вызывать как переменную функцию или передавать как именованный аргумент.
Замечание:
При вызове языковой конструкции empty() на недоступных (необъявленных, защищённых или закрытых) свойствах объекта вызывается метод перегрузки — __isset(), если он определён.
Смотрите также
- isset() — Определяет, была ли установлена переменная значением, отличным от null
- __isset()
- unset() — Удаляет переменную
- array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс
- count() — Подсчитывает количество элементов массива или Countable объекте
- strlen() — Возвращает длину строки
- Таблица сравнения типов
User Contributed Notes 36 notes
9 years ago
$testCase = array(
1 => » ,
2 => «» ,
3 => null ,
4 => array(),
5 => FALSE ,
6 => NULL ,
7 => ‘0’ ,
8 => 0 ,
foreach ( $testCase as $k => $v ) if (empty( $v )) echo »
$k => $v is empty» ;
>
>
/**
Output
1=> is empty
2=> is empty
3=> is empty
4=>Array is empty
5=> is empty
6=> is empty
7=>0 is empty
8=>0 is empty
**/
?>
14 years ago
Please note that results of empty() when called on non-existing / non-public variables of a class are a bit confusing if using magic method __get (as previously mentioned by nahpeps at gmx dot de). Consider this example:
class Registry
protected $_items = array();
public function __set ( $key , $value )
$this -> _items [ $key ] = $value ;
>
public function __get ( $key )
if (isset( $this -> _items [ $key ])) return $this -> _items [ $key ];
> else return null ;
>
>
>
$registry = new Registry ();
$registry -> empty = » ;
$registry -> notEmpty = ‘not empty’ ;
var_dump (empty( $registry -> notExisting )); // true, so far so good
var_dump (empty( $registry -> empty )); // true, so far so good
var_dump (empty( $registry -> notEmpty )); // true, .. say what?
$tmp = $registry -> notEmpty ;
var_dump (empty( $tmp )); // false as expected
?>
The result for empty($registry->notEmpty) is a bit unexpeced as the value is obviously set and non-empty. This is due to the fact that the empty() function uses __isset() magic functin in these cases. Although it’s noted in the documentation above, I think it’s worth mentioning in more detail as the behaviour is not straightforward. In order to achieve desired (expexted?) results, you need to add __isset() magic function to your class:
class Registry
protected $_items = array();
public function __set ( $key , $value )
$this -> _items [ $key ] = $value ;
>
public function __get ( $key )
if (isset( $this -> _items [ $key ])) return $this -> _items [ $key ];
> else return null ;
>
>
public function __isset ( $key )
if (isset( $this -> _items [ $key ])) return ( false === empty( $this -> _items [ $key ]));
> else return null ;
>
>
>
$registry = new Registry ();
$registry -> empty = » ;
$registry -> notEmpty = ‘not empty’ ;
var_dump (empty( $registry -> notExisting )); // true, so far so good
var_dump (empty( $registry -> empty )); // true, so far so good
var_dump (empty( $registry -> notEmpty )); // false, finally!
?>
It actually seems that empty() is returning negation of the __isset() magic function result, hence the negation of the empty() result in the __isset() function above.
Объявить пустой массив php?
Как объявить пустой массив?
если $arr = array();
то заполнение начнется с индекса 1($arr[1]).
Можно так:
$arr = array();
unset($arr[0]);
но как это сделать правильнее и проще?
- Вопрос задан более трёх лет назад
- 23273 просмотра
2 комментария
Оценить 2 комментария

с чего это вы интересно взяли что заполнение начнётся с индекса 1 в первом случае?
не нужно тянуть сюда паскаль
Решения вопроса 1

littleguga @littleguga
Не стыдно не знать, а стыдно не интересоваться.
Вы ошибаетесь — заполнение идет с 0 индекса.(по ссылке fiddle)
$arr = array(); array_push($arr, "test"); print_r($arr);
Сами проверьте, вот здесь, например.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 2

Danil Akhtarov @danil_sport
Web, android, C++
PHP.нет посмотри тут. В свое время помогло
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Alex Safonov @elevenelven
Php Dev @ Amadeus
Это описывается в руководстве.
php.net/manual/en/function.array.php
'January', 'February', 'March'); print_r($firstquarter); ?>
Как вариант, можете после наполнения массива, вставить в начало элемент, и убрать. Что двинет все ключи на 1.
$array = [1,2,3]; array_unshift($array, '' ); unset($array[0]);
Ответ написан более трёх лет назад
Михаил @Madfisht3 Автор вопроса
Нужно пустой массив объявить. Чтобы там не было элементов. Объявить, но так, чтоб он был не инициализирован.
Алексей Объявляйте массив как обычно (array() или []). При добавлении в массив указываете нужный ключ ($arr[1] = 3.14)
Михаил @Madfisht3 Автор вопроса
krypt3r: а если у меня заполнение идёт через array_push? Тогда у меня первый элемент будет пустой, на сайте это лишняя строчка пустая.
Михаил @Madfisht3 Автор вопроса
Neoline: 500 Ошибка.
Михаил @Madfisht3 Автор вопроса
Второй листинг эквивалентен unset($arr[0])

Alex Safonov @elevenelven
Алексей: Будьте добры, приведите полностью код который эквивалентен второму листингу. Я думаю вы не имеете ввиду
$arr = array(); unset($arr[0]); array_push($arr, 1);

Алексей: вы каким то не тем php пользуетесь — при инициализации массива в него никакие элементы не добавляются и если выполнить array_push() после инициализации, то в массиве появится элемент с индексом 0.