Способы проверки массива на пустоту в PHP
Доброго времени суток! В данной статье мы рассмотрим с Вами несколько способов проверки массива на пустоту в PHP.
Чтобы проверить, является ли массив в PHP пустым, мы можем использовать один из следующих методов:
1) Функция empty() — просто проверяет, является ли массив пустым — возвращает логическое значение. 2) Функции count()/sizeof(), — подсчитывают количество элементов в массиве, после чего нужно сравнить полученное значение с нулем. 3) Оператор «not» (!). Если массив содержит любое значение, оператор not вернет значение true, т.е. массива не пуст.
Функция empty()
Функция empty() определяет, является ли значение пустым или нет. Она просто возвращает true, если он пуст или false, если массива содержит элементы.
$Два = [‘Раз’, ‘Два’, ‘Три’];
Функция count()
Функция count() подсчитывает количество элементов в массиве и возвращает его как целое число. Данная функция может быть использована с объектами, реализующим интерфейс Countable.
Для многомерных массивов у функции count() есть второй параметр, для которого вы можете использовать константу COUNT_RECURSIVE для рекурсивного подсчета количества элементов.
$count = count($array, COUNT_RECURSIVE);
// Если $count больше нуля — массив не пуст
if ($count > 0) //
>
Функция sizeof()
Функция sizeof() является псевдонимом count(). На самом деле PHP имеет множество псевдонимов для различных функций .
Оператор not(!)
Примененный к массиву оператор отрицания — not в PHP, если массив не содержит элементов — вернет false, в противном случае true.
if (!$array) echo ‘А у Вас пустой массив’;
>
Вот таким способами можно проверить массив на пустоту в PHP.
![]()
Создано 30.03.2023 13:50:34
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
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.
Как лучше всего проверить что в массиве нет элементов?
Да все, в общем, корректны. Только в первом и четвертом случаях будет преобразование типа к bool, а третий подойдет только для индексных массивов. Есть еще вариант sizeof($arr) .
Отслеживать
20.4k 3 3 золотых знака 27 27 серебряных знаков 49 49 бронзовых знаков
ответ дан 20 мар 2012 в 8:20
14.7k 1 1 золотой знак 26 26 серебряных знаков 48 48 бронзовых знаков
ТРЕТИЙ — НЕ КОРРЕКТНЫЙ. Например, $a = [NULL]; — не пустой массив.
13 ноя 2017 в 2:22
Возможно, наилучший вариант if ($arr === Array())
Отслеживать
51.2k 86 86 золотых знаков 266 266 серебряных знаков 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.4k 3 3 золотых знака 27 27 серебряных знаков 49 49 бронзовых знаков
ответ дан 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
В этом посте мы обсудим, как определить, пуст ли массив в PHP.
1. Использование empty() функция
Переменная считается пустой в PHP, если она не существует или если ее значение равно false. empty() Функция возвращает true, если переменная пуста, иначе false. Вы можете использовать empty() функция для проверки пустых массивов. Он возвращает true, если в массиве нет элементов, и false в противном случае.
$array = array ( ) ;
if ( empty ( $array ) ) <
echo "Array is empty" ;
The empty() функция вернет true для всех ложных значений (например, false, 0, «», null, array() и т. д.). Если вы специально хотите проверить наличие пустых массивов, вы можете сначала проверить массив, используя is_array() функция.
$array = array ( ) ;
if ( is_array ( $array ) && empty ( $array ) ) <
echo "Array is empty" ;
2. Использование оператора отрицания
Поскольку пустой массив в PHP является ложным, вызов empty() можно заменить оператором логического отрицания ( ! ). Оператор логического отрицания неявно преобразует свой операнд в тип bool и возвращает логическое значение, противоположное значению преобразованного операнда. Как и в случае с empty() функцию, вы можете определить, является ли данная переменная массивом с is_array() функция.
$array = array ( ) ;
if ( is_array ( $array ) && ! $array ) <
echo "Array is empty" ;
3. Использование оператора сравнения тождеств
Кроме того, вы можете использовать операторы сравнения идентификаторов ( === а также !== ) для проверки наличия пустых массивов в PHP. Выражение $a === $b возвращает истину, если $a равно $b , и они одного типа. Вы можете сравнить свою переменную с array() построить с === оператор, который возвращает true только для пустых массивов и false в противном случае.
$array = array ( ) ;
if ( $array === array ( ) ) <
echo "Array is empty" ;
Начиная с PHP 5.4, вы можете использовать синтаксис короткого массива [] . Он работает аналогично тому, как array() построить, но позволяет избежать накладных расходов на вызов функции.
$array = array ( ) ;
echo «Array is empty» ;
4. Использование count() функция
Вы также можете подсчитать общее количество элементов в массиве. count() или же sizeof() будет работать для массивов или объектов, которые реализуют Countable. Для других ложных значений count() выдает фатальную ошибку: Uncaught TypeError: count(): первый аргумент ($value) должен иметь тип Countable|массив.
$array = array ( ) ;
if ( count ( $array ) === 0 ) <
echo "Array is empty" ;
5. Использование array_filter() функция
Если вам нужно проверить, содержит ли массив все ложные значения, вы можете передать свой массив в array_filter() функцию и сравнить полученный массив с array() построить или [] синтаксис с === оператор. array_filter() функция фильтрует элементы массива, используя функцию обратного вызова. Если обратный вызов не указан, все ложные значения будут удалены из массива. Это демонстрирует следующее решение:
