Как проверить пустой ли массив php
Перейти к содержимому

Как проверить пустой ли массив php

  • автор:

Способы проверки массива на пустоту в 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.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.

    Как проверить массив на пустоту?

    Оказалось это не работает.
    С ARRAY[0]= работает. Но стоит пявиться ARRAY[1]= и всё.

    Как же проверить за один раз, пустой ли массив?
    Столько скриптов переписано, а этого не знаю, вернее, был уверен, что знаю, а оказалось вон оно как.
    Должно же быть какое-то элементарное решение.

    teod0r ★★★★★
    02.09.21 20:51:00 MSK

    [ $ -eq 0 ] 

    $ — возвращает длину массива

    anonymous
    ( 02.09.21 21:16:24 MSK )

    еще $ преобразует массив в строку, тогда возможно -z сработает.

    anonymous
    ( 02.09.21 21:18:34 MSK )
    Ответ на: комментарий от anonymous 02.09.21 21:16:24 MSK

    Мне не количество элементов узнать нужно, а проверить, что все элементы пустые, т.е. что они ARRAY[0]= ARRAY[1]= ARRAY[2]= . , а не ARRAY[0]=iuy4tv8q ARRAY[1]=’ ‘ ARRAY[2]=1

    teod0r ★★★★★
    ( 02.09.21 21:20:29 MSK ) автор топика
    Ответ на: комментарий от anonymous 02.09.21 21:18:34 MSK

    тоже не работает

    teod0r ★★★★★
    ( 02.09.21 21:20:54 MSK ) автор топика
    Ответ на: комментарий от teod0r 02.09.21 21:20:29 MSK

    IFS='' -z "$" 

    Только IFS нужно сохранять/восстанавливать или sub-shell.

    А вобще, пустой массив и массив из пустых элементов это разные вещи.

    mky ★★★★★
    ( 02.09.21 21:31:31 MSK )
    Ответ на: комментарий от teod0r 02.09.21 21:20:54 MSK

    Я поигрался, вроде работает:

    IFS=»; ARRAY[0]= ARRAY[1]=aaa ARRAY[2]=»; echo «$»; echo; [ -z «$» ]; echo $?

    anonymous
    ( 02.09.21 21:44:00 MSK )
    Ответ на: комментарий от mky 02.09.21 21:31:31 MSK

    работает, но какое-то не очевидное решение

    teod0r ★★★★★
    ( 02.09.21 21:53:44 MSK ) автор топика
    Ответ на: комментарий от teod0r 02.09.21 21:53:44 MSK

    Это чисто теоретический вопрос или практический?

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

    firkax ★★★★★
    ( 02.09.21 22:15:37 MSK )

    Столько скриптов переписано, а этого не знаю, вернее, был уверен, что знаю, а оказалось вон оно как.

    Это и есть главная проблема помойки под названием bash (и другие shеллов тоже касается по большей части). На этом невозможно нормально программировать, нет нормального синтаксиса, куча edge кейсов, старое легаси, да и язык построен так, чтобы интерпретатору было удобно, а не человеку

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

    Не, можно конечно постичь все тонкости, знать все подводные камни, но один вопрос: зачем на это тратить свое время?

    Fizzika ★★
    ( 02.09.21 22:35:36 MSK )
    Ответ на: комментарий от Fizzika 02.09.21 22:35:36 MSK

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

    И тут врывается xonsh:

    def func(): a = sys.argv[1] git clone @(a) 

    Как лучше всего проверить что в массиве нет элементов?

    Да все, в общем, корректны. Только в первом и четвертом случаях будет преобразование типа к bool, а третий подойдет только для индексных массивов. Есть еще вариант sizeof($arr) .

    Отслеживать
    20.6k 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.3k 87 87 золотых знаков 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 

    ИССЛЕДОВАНИЯ:

    1. Данные ответ проверен через микротест со сложным массивом, с 40014 элементов и PHP 7.1
    2. Исполнение скрипта происходило на локальной машине (Open Server 5.2).
    3. Замер происходил через функцию php microtime()
    4. Результат проверялся трижды

    РЕЗУЛЬТАТЫ ИССЛЕДОВАНИЙ:

    1. if(count($arr)) : 0.0010001659393311 сек.
    2. if(sizeof($arr)) : 0 сек.
    3. if($array) : 0 сек.
    4. if(empty($arr)) : 0 сек.
    5. if(array_shift($arr)) : 0 сек.
    6. if($arr[0]) : 0 сек.
    1. if(count($arr)) : 0 сек.
    2. if(sizeof($arr)) : 0.0010011196136475 сек.
    3. if($array) : 0 сек.
    4. if(empty($arr)) : 0 сек.
    5. if(array_shift($arr)) : 0 сек.
    6. if($arr[0]) : 0 сек.
    1. if(count($arr)) : 0.00099992752075195 сек.
    2. if(sizeof($arr)) : 0 сек.
    3. if($array) : 0 сек.
    4. if(empty($arr)) : 0 сек.
    5. if(array_shift($arr)) : 0 сек.
    6. if($arr[0]) : 0 сек.

    ЧТО Я ЮЗАЮ:

    Для себя использую if($arr) <. >и if($arr[0]) <. >, так как нет необходимости вызывать дополнительные функции — обертки

    Отслеживать
    20.6k 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 

    in_array

    Ищет в haystack значение needle . Если strict не установлен, то при поиске будет использовано нестрогое сравнение.

    Список параметров

    Замечание:

    Если needle — строка, сравнение будет произведено с учётом регистра.

    Если третий параметр strict установлен в true , тогда функция in_array() также проверит соответствие типов параметра needle и соответствующего значения массива haystack .

    Замечание:

    До PHP 8.0.0 строковое значение параметра needle будет соответствовать значению массива 0 в нестрогом режиме, и наоборот. Это может привести к нежелательным результатам. Подобные крайние случаи существуют и для других типов. Если нет полной уверенности в типах значений, всегда используйте флаг strict , чтобы избежать неожиданного поведения.

    Возвращаемые значения

    Возвращает true , если needle был найден в массиве, и false в противном случае.

    Примеры

    Пример #1 Пример использования in_array()

    $os = array( «Mac» , «NT» , «Irix» , «Linux» );
    if ( in_array ( «Irix» , $os )) echo «Нашёл Irix» ;
    >
    if ( in_array ( «mac» , $os )) echo «Нашёл mac» ;
    >
    ?>

    Второго совпадения не будет, потому что in_array() регистрозависима, таким образом, программа выведет:

    Нашёл Irix

    Пример #2 Пример использования in_array() с параметром strict

    if ( in_array ( ‘12.4’ , $a , true )) echo «‘12.4’ найдено со строгой проверкой\n» ;
    >

    if ( in_array ( 1.13 , $a , true )) echo «1.13 найдено со строгой проверкой\n» ;
    >
    ?>

    Результат выполнения приведённого примера:

    1.13 найдено со строгой проверкой

    Пример #3 Пример использования in_array() с массивом в качестве параметра needle

    if ( in_array (array( ‘p’ , ‘h’ ), $a )) echo «‘ph’ найдено\n» ;
    >

    if ( in_array (array( ‘f’ , ‘i’ ), $a )) echo «‘fi’ найдено\n» ;
    >

    if ( in_array ( ‘o’ , $a )) echo «‘o’ найдено\n» ;
    >
    ?>

    Результат выполнения приведённого примера:

    'ph' найдено 'o' найдено

    Смотрите также

    • array_search() — Осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае успешного выполнения
    • isset() — Определяет, была ли установлена переменная значением, отличным от null
    • array_key_exists() — Проверяет, существует ли в массиве заданный ключ или индекс

    User Contributed Notes 8 notes

    12 years ago

    Loose checking returns some crazy, counter-intuitive results when used with certain arrays. It is completely correct behaviour, due to PHP’s leniency on variable types, but in «real-life» is almost useless.

    The solution is to use the strict checking option.

    $array = array(
    ‘egg’ => true ,
    ‘cheese’ => false ,
    ‘hair’ => 765 ,
    ‘goblins’ => null ,
    ‘ogres’ => ‘no ogres allowed in this array’
    );

    // Loose checking — return values are in comments

    // First three make sense, last four do not

    in_array ( null , $array ); // true
    in_array ( false , $array ); // true
    in_array ( 765 , $array ); // true
    in_array ( 763 , $array ); // true
    in_array ( ‘egg’ , $array ); // true
    in_array ( ‘hhh’ , $array ); // true
    in_array (array(), $array ); // true

    in_array ( null , $array , true ); // true
    in_array ( false , $array , true ); // true
    in_array ( 765 , $array , true ); // true
    in_array ( 763 , $array , true ); // false
    in_array ( ‘egg’ , $array , true ); // false
    in_array ( ‘hhh’ , $array , true ); // false
    in_array (array(), $array , true ); // false

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *