php проверка пустой массив
Как проверить массив PHP, чтобы помочь своему другу
Дата публикации: 2016-12-28
Зачем проверять?
Программный код, как и человека (если не доверяете ему), лучше проверить. А то случившийся из-за излишней доверчивости (или безалаберности) разработчика баг может негативно сказаться на работоспособности всего приложения. Причем это может быть не только обидно, но и чревато:
Пострадает репутация авторитет всей команды разработчиков.
Не получите деньги за проект – созданное вами решение не пройдет тестирование.
Время на переделку – а это снова связано с финансовыми потерями.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
В общем, проверять нужно любой программный код. Именно поэтому в любом языке «навалом» различных встроенных функций, начинающихся с префикса is. Не является исключением и PHP.
Эти функции чаще всего возвращают значение типа bool. С их помощью удобно проверять код (переменные) на соответствие каким-либо условием. Например, можно удостовериться, что переменная является массивом. Для этого применим функцию is_array():
Как проверить, есть ли в массиве пустое значение?
У меня есть массив, который я хочу проверить на наличие пустых элементов, я попытался использовать array_walk для обхода массива (массив одного измерения) и вернуть true, если массив элементов (значений) имеет какие-либо пустые элементы.
Естественно, я зашел на сайт PHP, посмотрел на примеры, которые предлагаются, и они не имеют никакого смысла, потому что это не дает четкого примера того, как вы будете использовать array_walk для этого. Я попробовал array_filter, и это тоже не особо помогло.
Пример того, что я пытался сделать.
Все, что я получаю в результате, это «Массив».
До сих пор я нашел много примеров на многих сайтах, и кажется, что люди только что скопировали и вставили примеры PHP, некоторые изменили свои имена, чтобы скрыть, что они скопировали и вставили пример …
Может кто-нибудь дать мне знать, что я делаю здесь неправильно, пожалуйста?
(Также сопровождающие сайта FAO stackoverflow. Какой смысл предлагать тег, я нажимаю, чтобы использовать его, и затем мне говорят, что я не могу создать новый тег, если у меня нет 1500 баллов. Серьезно Почему? Хорошая идея, если вы идете и подумай об этом.)
Решение
Другие решения
array_walk не поможет вам в этом. Это функция-мутатор, предназначенная для изменения элементов массива, а не для получения информации о них. То, что вы ищете, это логическая функция агрегатора, известная как any или же some на других языках. PHP не предоставляет его из коробки, поэтому вы должны написать это вручную:
потерпит неудачу, потому что empty не является реальной функцией и не может использоваться косвенно. Обходной путь должен заключить его в еще одну функцию и передать ее any :
Обратите внимание, что в отличие от any что «ленивый», filter всегда обрабатывает весь массив.
документы за array_walk say «Применяет пользовательскую функцию обратного вызова к каждому элементу массива». Следовательно, вы можете использовать его с вашими обратными вызовами или с закрытием, например так:
Если вы хотите выяснить, являются ли какие-либо из значений пустыми, функция, которая останавливается после того, как находит пустой элемент, будет лучше:
Как проверить, пуст ли массив с помощью 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() не просто говорит вам, есть ли у вас значения или нет, она говорит вам, если массив пуст, и ключи являются частью массива.
Поэтому подумайте, как вы создаете свой массив, прежде чем решить, какой метод проверки использовать.
Например, массив будет иметь ключи, когда пользователь отправит вашу HTML-форму, когда каждое поле формы имеет имя массива (т.е. name=»array[]» ).
Для каждого поля будет создан непустой массив, поскольку для каждого массива поля формы будут автоматически увеличиваться значения ключей.
Возьмите эти массивы, например:
Если вы выводите ключи массива и значения для вышеуказанных массивов, вы получаете следующее:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]
И тестирование вышеупомянутых массивов с empty() возвращает следующие результаты:
ARRAY TWO:
$ ArrayTwo не пусто
ARRAY THREE:
$ ArrayThree не пусто
Массив всегда будет пустым, когда вы назначаете массив, но не используете его после этого, например:
Это будет пустым, то есть PHP вернет TRUE при использовании if empty() на вышеупомянутом.
В этом случае вы можете зациклить массив в foreach, проверяя, имеет ли каждый ключ значение. Это хороший метод, если вам все равно нужно пробежаться по массиву, возможно, проверить ключи или очистить данные.
Вот подход, который использует очень мало кода для проверки, имеет ли массив значения:
Использование array_filter() :
перебирает каждое значение в массиве, передавая их функции обратного вызова. Если функция обратного вызова возвращает true, текущее значение из массива возвращается в массив результатов. Ключи массива сохранены.
Выполнение array_filter() всех трех примеров массивов (созданных в первом блоке кода в этом ответе) приводит к следующему:
Массив 3:
$ arraythree пусто
Поэтому, когда значений нет, есть ли ключи или нет, использование array_filter() для создания нового массива, а затем проверка, является ли новый массив пустым, показывает, были ли какие-либо значения в исходном массиве.
Это не идеально и немного грязно, но если у вас огромный массив и вам не нужно его циклически перебирать по любой другой причине, то это самый простой с точки зрения кода код.
У меня нет опыта в проверке накладных расходов, но было бы хорошо узнать разницу между использованием array_filter() и foreach проверкой, найдено ли значение.
Очевидно, что эталонный тест должен быть по различным параметрам, по маленьким и большим массивам, и когда есть значения, а не и т.д.
Если вы хотите выяснить, является ли тестируемая переменная явно пустым массивом, вы можете использовать что-то вроде этого:
Если вы хотите исключить ложные или пустые строки (например, 0 => » ), где использование empty() не удастся, вы можете попробовать:
array_filter() : Если обратный вызов не предоставлен, все записи массива, равные FALSE (см. Преобразование в логическое значение), будут удалены.
Если вы хотите удалить все NULL, FALSE и пустые строки ( » ), но оставить нулевые значения ( 0 ), вы можете использовать strlen в качестве обратного вызова, например:
Почему никто не сказал этот ответ:
Я провел тест, включенный в конце поста. Чтобы сравнить методы:
и получил следующие результаты
Разница между пустым и приведением к логическому значению незначительна. Я провел этот тест несколько раз, и они, по-видимому, по сути эквивалентны. Содержимое массивов, похоже, не играет существенной роли. Оба дают противоположные результаты, но логического отрицания едва ли достаточно, чтобы подтолкнуть кастинг к победе большую часть времени, поэтому я лично предпочитаю пустой для ясности в любом случае.
если вы хотите проверить содержимое массива, вы можете использовать:
На мой взгляд, самый простой способ для индексированного массива будет просто:
Я использую этот код
Но учтите, что если массив содержит большое количество ключей, этот код потратит много времени на их подсчет по сравнению с другими ответами здесь.
Вы можете использовать, array_filter() который отлично подходит для всех ситуаций:
Я думаю, что лучший способ определить, является ли массив пустым или нет, это использовать count () следующим образом:
Принятие наиболее подходящего решения требует знания качества ваших данных и того, какими процессами следует следовать.
Если вы собираетесь дисквалифицировать / игнорировать / удалить эту строку, то самая ранняя точка фильтрации должна быть в запросе mysql.
Может ли ваше строковое значение содержать значение, 0 которое вы хотите считать истинным / действительным / непустым? Если это так, то вам нужно только проверить, имеет ли значение столбца длину.
Почему я пошел так долго, чтобы объяснить эту самую основную задачу?
Проверить массив PHP пуст или нет?
У меня есть массив PHP, как показано ниже:
‘; Array ( [0] => Array ( [bank_name] => [] [bank_code] => [branch] => [account_number] => [account_type] => ) )
Теперь мне нужно проверить, это bank array пусто или нет. Это означает, что весь индекс должен иметь значение.
Вот как я это попробовал:
Но это не работает для меня. Он всегда собирается в другую часть, даже если массив не пустой.
ОБНОВИТЬ:
Надеюсь, кто-нибудь может мне помочь.
Решение
РЕДАКТИРОВАТЬ:
ОРИГИНАЛЬНЫЙ ОТВЕТ:
То, что вы ищете, это array_every функция. Давайте начнем с простого примера:
Давайте посмотрим это с вашими данными сейчас
Другие решения
Вам не нужно запускать дополнительный цикл. Если вы хотите проверить, все ли поля в массиве банка пусты, используйте array_filter () функция.
array_filter () Итерирует по каждому значению в массиве, передавая их функции обратного вызова.
Если функция обратного вызова возвращает true, текущее значение из массива возвращается в массив результатов. Ключи массива сохранены.
Ты можешь использовать array_walk_recursive
Применяет пользовательскую функцию обратного вызова к каждому элементу
массив. Эта функция превратится в более глубокие массивы.
Замечания:
проверьте это, может быть, это полезно для вас.