проверка массива на пустоту php
Проверка на массив, на наличие элементов и на пустоту в PHP
В этой статье будем делать различные проверки массива. В том числе проверим является ли переменная массивом, а так же проверим есть ли у ключей массива пустые значения. Будем двигаться от простого к более сложному. И первое, что можно сделать, это проверить на массив. Для этого нам помоет встроенная в язык PHP функция is_array. Разберем небольшой пример.
$arr = [‘id’, ‘name’, ’email’]; // Массив элементов if(is_array($arr))< echo 'Это массив'; >else
Функция вернет true, если это массив и false — если не массив. Это простой пример и сложностей возникнуть не должно. Перейдем к следующему примеру.
Проверка массива на пустоту и пустые элементы в PHP
Функция empty сработает только в том случае, когда в массиве нет вообще никаких элементов. Поэтому ее лучше не использовать при проверке массивов. В этом случае нам поможет еще одна функция — array_diff. С ее помощью мы сравним исходный массив с другим массивом и в случае расхождения выведем элементы массива, которые не совпадают. Может быть немного сумбурно и не понятно, но давайте разберем на примере.
array(8) < [0]=>string(4) «name» [1]=> string(0) «» [2]=> string(3) «num» [3]=> [4]=> string(0) «» [5]=> [6]=> string(4) «Alex» [7]=> string(0) «» > array(3) < [0]=>string(4) «name» [2]=> string(3) «num» [6]=> string(4) «Alex» >
Функция пропустит все пустые элемент массива, в том числе NULL и false и выведет только те, в которых что-то есть. Мы так же можем проверить какой именно элемент массива был пустой с помощью цикла for.
array(4) < ["age"]=>int(34) [«name»]=> string(4) «Ivan» [«city»]=> string(0) «» [«number»]=> string(0) «» > array(2) < ["age"]=>int(34) [«name»]=> string(4) «Ivan» >
Проверить наличие элемента в массиве
Для этих целей подойдет функция in_array. Она проверяет на присутствие в массиве значения.
Первым аргументом указываем что будем искать, вторым — где. На этом по работе с массивами окончен. Надеюсь, что вам в нем все было понятно. Но если остались какие-то вопросы, задавайте их в комментариях.
Как проверить, пуст ли массив с помощью PHP?
17 ответов
Если вам просто нужно проверить, есть ли какие-либо элементы в массиве
Если вам нужно убрать пустые значения перед проверкой (обычно делается для предотвращения explode ing странные строки):
пустой массив falsey в PHP, поэтому вам даже не нужно использовать empty() как предлагали другие.
некоторые достойные ответы, но просто подумал, что я немного расширю, чтобы объяснить более четко, когда PHP определяет, пуст ли массив.
массив с ключом (или ключами) будет определяться как не пусто по PHP.
поскольку значения массива нуждаются в ключах, наличие значений или отсутствие в массиве не определяет, пусто ли оно, только если нет ключей (и, следовательно, нет значений).
поэтому проверка массив с empty() не просто говорит вам, есть ли у вас значения или нет, он говорит вам, если массив пуст, а ключи являются частью массива.
поэтому рассмотрите, как вы производите свой массив, прежде чем решать, какой метод проверки использовать.
Например, массив будет есть ключи, когда пользователь отправляет HTML-форму, когда каждое поле формы имеет имя массива (т. е. name=»array[]» ).
А непустых массив будет произведен для каждого поля по мере того как будет автоматически увеличенные значения ключей для каждого массива поля формы.
возьмите эти массивы, например:
если вы отзовете ключи массива и значения для вышеуказанных массивов, вы получите следующее:
МАССИВ ОДИН:
[UserKeyA] => [UserValueA]
[UserKeyB] = > [UserValueB]
МАССИВ ДВА:
[0] => [UserValue01]
[1] => [UserValue02]
и тестирование вышеуказанных массивов с помощью empty() возвращает следующие результаты:
МАССИВ ДВА:
$ArrayTwo не пуст
МАССИВ ТРИ:
$ArrayThree не пуст
массив всегда будет пустым, когда вы назначаете массив, но не используйте его после этого, например as:
это будет пусто, т. е. PHP вернет TRUE при использовании if empty() на выше.
в этом случае вы можете зациклить массив в foreach, проверяя, имеет ли каждый ключ значение. Это хороший метод, если вы в любом случае нужно запустить массив, возможно, проверяя ключи или санируя данные.
однако это не лучший метод, если вам просто нужно знать,» если значения существуют » возвращает правда или FALSE. Существуют различные методы определения того, имеет ли массив какие-либо значения, когда он знает, что у него будут ключи. Функция или класс могут быть лучшим подходом, но, как всегда, это зависит от вашей среды и точных требований, а также от других вещей, таких как в настоящее время вы делаете с массивом (если что).
вот подход, который использует очень мало кода, чтобы проверить, имеет ли массив значения:
используя array_filter() :
Перебирает каждое значение в массиве, передавая их функции обратного вызова. Если функция обратного вызова возвращает true, текущее значение из массива возвращается в массив результатов. Ключи массива сохраняются.
под управлением array_filter() на всех трех массивов (создан в первый блок кода в этом ответе) приводит к следующему:
МАССИВ ДВА:
$arraytwo не пуст
МАССИВ ТРИ:
$arraythree пуст
поэтому, когда нет значений, есть ли ключи или нет, используя array_filter() чтобы создать новый массив, а затем проверить, пуст ли новый массив, показывает, были ли какие-либо значения в исходном матрица.
Это не идеально и немного беспорядочно, но если у вас есть огромный массив и вам не нужно перебирать его по какой-либо другой причине, то это самый простой с точки зрения кода.
у меня нет опыта в проверке накладных расходов, но было бы хорошо знать различия между использованием array_filter() и foreach проверка, Найдено ли значение.
очевидно, что бенчмарк должен быть по различным параметрам, на малых и больших массивах и когда есть ценностей и т. д.
Как проверить, пуст ли массив с помощью PHP?
Если вам просто нужно проверить, есть ли в массиве ЛЮБЫЕ элементы
Если вам нужно очистить пустые значения перед проверкой (как правило, для предотвращения explode странных строк):
Пустой массив ошибочен в PHP, поэтому вам даже не нужно использовать empty() как предложили другие.
Некоторые достойные ответы, но просто подумал, что я немного расширю, чтобы объяснить более четко, когда PHP определяет, является ли массив пустым.
Массив с ключом (или ключами) будет определен как НЕ пустой PHP.
Поскольку значениям массива нужны ключи для существования, значения или нет в массиве не определяют, является ли он пустым, только если нет ключей (и, следовательно, нет значений).
Поэтому проверка массива с помощью empty() не просто говорит вам, есть ли у вас значения или нет, это говорит вам, что массив пуст, а ключи являются частью массива.
Поэтому рассмотрите, как вы производите свой массив, прежде чем принимать решение о том, какой метод проверки использовать.
EG Массив будет иметь ключи, когда пользователь отправит вашу форму HTML, когда каждое поле формы имеет имя массива (т. Е. Name name=»array[]» ).
Для каждого поля будет создан непустой массив, так как для каждого массива поля формы будут добавлены автоматически увеличивающиеся значения ключа.
Возьмите эти массивы, например:
Если вы выделите ключи массива и значения для указанных выше массивов, вы получите следующее:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]
И тестирование вышеуказанных массивов с помощью empty() возвращает следующие результаты:
ARRAY TWO:
$ ArrayTwo не пуст
МАССА ТРИ:
$ ArrayThree не пуст
Массив всегда будет пустым, когда вы назначаете массив, но не используете его после этого, например:
Это будет пустым, то есть PHP вернет TRUE при использовании, если empty() указан выше.
В этом случае вы можете зацикливать массив в foreach, проверяя, имеет ли каждый ключ значение. Это хороший метод, если вам все равно нужно проходить через массив, возможно, проверять ключи или дезинфицировать данные.
Вот подход, который использует очень мало кода для проверки того, имеет ли массив значения:
Использование array_filter() :
Итерирует по каждому значению в массиве, передавая их функции обратного вызова. Если функция обратного вызова возвращает значение true, текущее значение из массива возвращается в массив результатов. Клавиши массива сохраняются.
Запуск array_filter() во всех трех примерах массивов (созданных в первом блоке кода в этом ответе) приводит к следующему:
ARRAY TWO:
$ arraytwo не пуст
МАССА ТРИ:
$ arraythree пуст
Поэтому, когда нет значений, есть ли ключи или нет, используйте array_filter() для создания нового массива, а затем проверьте, пуст ли новый массив, показывает ли какие-либо значения в исходном массиве.
Это не идеально и немного беспорядочно, но если у вас огромный массив и не нужно его прокручивать по какой-либо другой причине, то это самый простой с точки зрения кода.
Я не уверен в проверке накладных расходов, но было бы полезно знать различия между использованием array_filter() и проверки foreach если значение найдено.
Очевидно, что эталонный показатель должен быть по разным параметрам, на небольших и больших массивах и когда есть значения, а не и т. Д.
count($gamerow[‘players’]) будет 0.
Если вы хотите выяснить, действительно ли переменная, которую вы тестируете, явно пустой массив, вы можете использовать что-то вроде этого:
Я использую этот код
Но учтите, что если массив имеет большое количество ключей, этот код будет тратить много времени на их подсчет, по сравнению с другими ответами здесь.
если вы хотите проверить содержимое массива, которое вы можете использовать:
вы можете использовать array_filters, который отлично работает для всех ситуаций
Почему никто не ответил на этот ответ:
Я думаю, что лучший способ определить, пуст ли массив или нет, – использовать count () следующим образом:
Вышеупомянутые решения не сработали для меня. Скорее я использовал более надежный способ (у него могут быть накладные расходы):
Как проверить, пуст ли массив с помощью PHP?
Если вам просто нужно проверить, есть ли в массиве ЛЮБЫЕ элементы
Если вам нужно очистить пустые значения перед проверкой (как правило, для предотвращения explode странных строк):
Пустой массив ошибочен в PHP, поэтому вам даже не нужно использовать empty() как предложили другие.
Некоторые достойные ответы, но просто подумал, что я немного расширю, чтобы объяснить более четко, когда PHP определяет, является ли массив пустым.
Массив с ключом (или ключами) будет определен как НЕ пустой PHP.
Поскольку значениям массива нужны ключи для существования, значения или нет в массиве не определяют, является ли он пустым, только если нет ключей (и, следовательно, нет значений).
Поэтому проверка массива с помощью empty() не просто говорит вам, есть ли у вас значения или нет, это говорит вам, что массив пуст, а ключи являются частью массива.
Поэтому рассмотрите, как вы производите свой массив, прежде чем принимать решение о том, какой метод проверки использовать.
EG Массив будет иметь ключи, когда пользователь отправит вашу форму HTML, когда каждое поле формы имеет имя массива (т. Е. Name name=»array[]» ).
Для каждого поля будет создан непустой массив, так как для каждого массива поля формы будут добавлены автоматически увеличивающиеся значения ключа.
Возьмите эти массивы, например:
Если вы выделите ключи массива и значения для указанных выше массивов, вы получите следующее:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]
И тестирование вышеуказанных массивов с помощью empty() возвращает следующие результаты:
ARRAY TWO:
$ ArrayTwo не пуст
МАССА ТРИ:
$ ArrayThree не пуст
Массив всегда будет пустым, когда вы назначаете массив, но не используете его после этого, например:
Это будет пустым, то есть PHP вернет TRUE при использовании, если empty() указан выше.
В этом случае вы можете зацикливать массив в foreach, проверяя, имеет ли каждый ключ значение. Это хороший метод, если вам все равно нужно проходить через массив, возможно, проверять ключи или дезинфицировать данные.
Вот подход, который использует очень мало кода для проверки того, имеет ли массив значения:
Использование array_filter() :
Итерирует по каждому значению в массиве, передавая их функции обратного вызова. Если функция обратного вызова возвращает значение true, текущее значение из массива возвращается в массив результатов. Клавиши массива сохраняются.
Запуск array_filter() во всех трех примерах массивов (созданных в первом блоке кода в этом ответе) приводит к следующему:
ARRAY TWO:
$ arraytwo не пуст
МАССА ТРИ:
$ arraythree пуст
Поэтому, когда нет значений, есть ли ключи или нет, используйте array_filter() для создания нового массива, а затем проверьте, пуст ли новый массив, показывает ли какие-либо значения в исходном массиве.
Это не идеально и немного беспорядочно, но если у вас огромный массив и не нужно его прокручивать по какой-либо другой причине, то это самый простой с точки зрения кода.
Я не уверен в проверке накладных расходов, но было бы полезно знать различия между использованием array_filter() и проверки foreach если значение найдено.
Очевидно, что эталонный показатель должен быть по разным параметрам, на небольших и больших массивах и когда есть значения, а не и т. Д.
count($gamerow[‘players’]) будет 0.
Если вы хотите выяснить, действительно ли переменная, которую вы тестируете, явно пустой массив, вы можете использовать что-то вроде этого:
Я использую этот код
Но учтите, что если массив имеет большое количество ключей, этот код будет тратить много времени на их подсчет, по сравнению с другими ответами здесь.
если вы хотите проверить содержимое массива, которое вы можете использовать:
вы можете использовать array_filters, который отлично работает для всех ситуаций
Почему никто не ответил на этот ответ:
Я думаю, что лучший способ определить, пуст ли массив или нет, – использовать count () следующим образом:
Вышеупомянутые решения не сработали для меня. Скорее я использовал более надежный способ (у него могут быть накладные расходы):
is_array
(PHP 4, PHP 5, PHP 7, PHP 8)
is_array — Определяет, является ли переменная массивом
Описание
Определяет, является ли данная переменная массивом.
Список параметров
Возвращаемые значения
Примеры
Пример #1 Проверяет, является ли переменная массивом
Результат выполнения данного примера:
Смотрите также
User Contributed Notes 30 notes
Please note that the ‘cast to array’ check is horrendously out of date.
Running that code against PHP 5.6 results in this:
is_array : 0.93975400924683
cast, === : 1.2425191402435
So, please use ‘is_array’, not the horrible casting hack.
Or you could make use of the array_diff_key and array_key function:
?>
The above code outputs:
I’m an assoc array.
I’m not an assoc array.
I’m not an assoc array.
I’m not an assoc array.
I’m not an assoc array.
I’m not an assoc array.
Yet another simpler, faster is_assoc():
I’ve found a faster way of determining an array. If you use is_array() millions of times, you will notice a *huge* difference. On my machine, this method takes about 1/4 the time of using is_array().
Cast the value to an array, then check (using ===) if it is identical to the original.
Prints something like:
What’s faster for determining arrays?
is_array : 7.9920151233673
cast, === : 1.8978719711304
Tested 1000000 iterations.
hperrin’s results have indeed changed in PHP 7. The opposite is now true, is_array is faster than comparison:
is_array : 0.52148389816284
cast, === : 0.84179711341858
Tested 1000000 iterations.
The next post is not correct because has problems with blank array index:
https://www.php.net/manual/es/function.is-array.php#89332
The next code use the above link php code
«Associative arrays are arrays that use named keys that you assign to them.»
https://www.w3schools.com/php/php_arrays.asp
If you want check pure assoc. array replace > 0 by === count($array)
So here’s the modified (is_vector) version
or you can add check is_array in functions
is_assoc1(): 2.1628699302673
is_assoc2(): 1.1079933643341
is_assoc3(): 1.7120850086212
is_assoc4(): 3.9194552898407
is_assoc5(): 1.9509885311127
Using is_array prior to an in_array within an if clause will safely escape a check against a variable that could potentially be a non-array when using in_array. For instance:
NOTE: A real use case might be that we have a list of possible flags which in a database we have stored whether each of the flags are 0 or 1. We want a list of the flags which have the value of 1 to be returned.
Our example here will not use so many technical artifacts, but will be based on similar logic just to get the point across.
?>
Hope that can help someone, I know it helped me.
I would change the order of the comparison, because if it is really an empty array, it is better to stop at that point before doing several ‘cpu & memory intensive’ function calls.
In the end on a ratio of 3 not empty arrays to 1 empty array computed for 1000000 iterations it needed 10% less time.
Or the other way round:
It needed approx 3% to 4% more time if the array is not empty, but was at least 4 times faster on empty arrays.
Additionally the memory consumption veritably lesser.
The is_associative_array() and is_sequential_array() functions posted by ‘rjg4013 at rit dot edu’ are not accurate.
The functions fail to recognize indexes that are not in sequence or in order. For example, array(0=>’a’, 2=>’b’, 1=>’c’) and array(0=>’a’, 3=>’b’, 5=>’c’) would be considered as sequential arrays. A true sequential array would be in consecutive order with no gaps in the indices.
The following solution utilizes the array_merge properties. If only one array is given and the array is numerically indexed, the keys get re-indexed in a continuous way. The result must match the array passed to it in order to truly be a numerically indexed (sequential) array. Otherwise it can be assumed to be an associative array (something unobtainable in languages such as C).
The following functions will work for PHP >= 4.
And here is another variation for a function to test if an array is associative. Based on the idea by mot4h.
A slight modification of what’s below: