players
будет либо пустым, либо разделенным запятыми списком (или одним значением). Какой самый простой способ проверить, пусто ли оно? Я предполагаю, что смогу сделать это, как только я получу $gameresult
массив в $gamerow
? В этом случае, вероятно, было бы более эффективно пропустить взрыв, $playerlist
если он пуст, но ради аргумента, как бы я проверил, если массив также пуст?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
Ответы:
Если вам просто нужно проверить, есть ли какие-либо элементы в массиве
Если вам нужно очистить пустые значения перед проверкой (обычно это делается для предотвращения появления
explode
странных строк):источник
empty()
.if(!isset($emptyarray))
естьfalse
ноif(empty($emptyarray))
возвращаетсяtrue
. Это меня просто прибилоПустой массив в PHP ложный, поэтому вам даже не нужно его использовать,
empty()
как предлагали другие.РНР
empty()
определяет , является ли переменная не существует или имеет значение falsey (напримерarray()
,0
,null
,false
и т.д.).В большинстве случаев вы просто хотите проверить
!$emptyVar
. Используйте,empty($emptyVar)
если переменная может быть не установлена И вы не будете вызыватьE_NOTICE
; ИМО это вообще плохая идея.источник
Некоторые приличные ответы, но я подумал, что я бы немного расширил их, чтобы объяснить более четко, когда PHP определяет, является ли массив пустым.
Основные примечания:
Массив с ключом (или ключами) будет определен как НЕ пустой в PHP.
Поскольку для значений массива необходимы ключи, наличие или отсутствие значений в массиве не определяет, является ли он пустым, только если нет ключей (И, следовательно, нет значений).
Так что проверка массива с помощью
empty()
не просто говорит вам, есть ли у вас значения или нет, она говорит вам, если массив пуст, и ключи являются частью массива.Поэтому подумайте, как вы создаете свой массив, прежде чем решить, какой метод проверки использовать.
Например, массив будет иметь ключи, когда пользователь отправит вашу HTML-форму, когда каждое поле формы имеет имя массива (т.е.
name="array[]"
).Для каждого поля будет создан непустой массив, поскольку для каждого массива поля формы будут автоматически увеличиваться значения ключей.
Возьмите эти массивы, например:
Если вы выводите ключи массива и значения для вышеуказанных массивов, вы получаете следующее:
И тестирование вышеупомянутых массивов с
empty()
возвращает следующие результаты:Массив всегда будет пустым, когда вы назначаете массив, но не используете его после этого, например:
Это будет пустым, то есть PHP вернет TRUE при использовании if
empty()
на вышеупомянутом.Таким образом, если в вашем массиве есть ключи - например, с помощью входных имен формы или если вы назначаете их вручную (т.е. создаете массив с именами столбцов базы данных в качестве ключей, но без значений / данных из базы данных), то массив НЕ будет
empty()
.В этом случае вы можете зациклить массив в foreach, проверяя, имеет ли каждый ключ значение. Это хороший метод, если вам все равно нужно пробежаться по массиву, возможно, проверить ключи или очистить данные.
Однако это не лучший метод, если вам просто нужно знать, «если значения существуют», возвращает TRUE или FALSE . Существуют различные методы, чтобы определить, есть ли у массива какие-либо значения, когда он знает, что у него будут ключи. Функция или класс могут быть лучшим подходом, но, как всегда, это зависит от вашей среды и точных требований, а также от других вещей, таких как то, что вы в настоящее время делаете с массивом (если что-нибудь).
Вот подход, который использует очень мало кода для проверки, имеет ли массив значения:
Использование
array_filter()
:перебирает каждое значение в массиве, передавая их функции обратного вызова. Если функция обратного вызова возвращает true, текущее значение из массива возвращается в массив результатов. Ключи массива сохранены.
Выполнение
array_filter()
всех трех примеров массивов (созданных в первом блоке кода в этом ответе) приводит к следующему:Поэтому, когда значений нет, есть ли ключи или нет, использование
array_filter()
для создания нового массива, а затем проверка, является ли новый массив пустым, показывает, были ли какие-либо значения в исходном массиве.Это не идеально и немного грязно, но если у вас огромный массив и вам не нужно его циклически перебирать по любой другой причине, то это самый простой с точки зрения кода код.
У меня нет опыта в проверке накладных расходов, но было бы хорошо узнать разницу между использованием
array_filter()
иforeach
проверкой, найдено ли значение.Очевидно, что эталонный тест должен быть по различным параметрам, по маленьким и большим массивам, и когда есть значения, а не и т.д.
источник
array_filter()
count(array())==0
имеет значение false, когда есть ключи и нет значений, поэтому это не помогает проверять только значения. Ваше утверждение верно, но вы вынуждены выполнить тест,count(array())
поскольку массив, конечно, пуст. Нам нужно проверить, вернулся ли массив из формы или куда-то еще, чтобы узнать, пустой ли он (ключи / значения) или просто имеет значения или нетarray_filter($_FILES["documento"]['name'])
count($gamerow['players'])
будет 0.источник
Если вы хотите выяснить, является ли тестируемая переменная явно пустым массивом, вы можете использовать что-то вроде этого:
источник
Если вы хотите исключить ложные или пустые строки (например,
0 => ''
), где использованиеempty()
не удастся, вы можете попробовать:Если вы хотите удалить все NULL, FALSE и пустые строки (
''
), но оставить нулевые значения (0
), вы можете использоватьstrlen
в качестве обратного вызова, например:источник
Почему никто не сказал этот ответ:
источник
array()
же самого.===
вместо==
, так как это быстрее.is_array
источник
explode()
- он возвращает данные типа массива. Проверкаempty()
является ненужным вызовом функции. Как заявил Кобби в 2012 году,if($detect)
это все, что требуется. Это решение не должно быть реализовано для этой или других задач. Можно возразить , что вы охватывает ситуации , выходит за рамки данного Вопроса в, ну, там никогда не нужно вызыватьempty()
ПОСЛЕis_array()
потому что , если переменная не «набор», тоis_array()
будет генерировать «Примечание: Undefined переменной», еслиisset()
тогдаempty()
это перебор, просто использовать Кобби ответ.Я провел тест, включенный в конце поста. Чтобы сравнить методы:
count($arr) == 0
: countempty($arr)
: пусто$arr == []
: comp(bool) $arr
: бросатьи получил следующие результаты
Разница между пустым и приведением к логическому значению незначительна. Я провел этот тест несколько раз, и они, по-видимому, по сути эквивалентны. Содержимое массивов, похоже, не играет существенной роли. Оба дают противоположные результаты, но логического отрицания едва ли достаточно, чтобы подтолкнуть кастинг к победе большую часть времени, поэтому я лично предпочитаю пустой для ясности в любом случае.
источник
sizeof
какой [не?] Псевдонимempty
... stackoverflow.com/a/51986794/1429432===
вместо==
.если вы хотите проверить содержимое массива, вы можете использовать:
смотрите здесь: http://codepad.org/EORE4k7v
источник
На мой взгляд, самый простой способ для индексированного массива будет просто:
Условие if в массиве будет иметь значение true, если массив не пустой, и false, если массив пустой . Это не относится к ассоциативным массивам.
источник
Я использую этот код
Но учтите, что если массив содержит большое количество ключей, этот код потратит много времени на их подсчет по сравнению с другими ответами здесь.
источник
Вы можете использовать,
array_filter()
который отлично подходит для всех ситуаций:источник
источник
Я думаю, что лучший способ определить, является ли массив пустым или нет, это использовать count () следующим образом:
источник
count()
Вызов может быть полностью удален - см ответ Cobby в.Принятие наиболее подходящего решения требует знания качества ваших данных и того, какими процессами следует следовать.
Если вы собираетесь дисквалифицировать / игнорировать / удалить эту строку, то самая ранняя точка фильтрации должна быть в запросе mysql.
WHERE players IS NOT NULL
WHERE players != ''
WHERE COALESCE(players, '') != ''
WHERE players IS NOT NULL AND players != ''
Если вы не уверены на 100%, существует ли столбец в наборе результатов, вам следует проверить, объявлен ли этот столбец. Это будет означать , позвонив
array_key_exists()
,isset()
илиempty()
на колонке. Я не собираюсь описывать различия здесь (есть другие страницы SO для этой разбивки, вот начало: 1 , 2 , 3 ). Тем не менее, если вы не имеете полного контроля над результирующим набором, то, возможно, у вас чрезмерная «гибкость» приложения, и вам следует переосмыслить, если проблема потенциального доступа к несуществующим данным столбца того стоит. По сути, я говорю, что вам никогда не нужно проверять, объявлен ли столбец - поэтому вам никогда не понадобитсяempty()
эта задача. Если кто-то утверждает, чтоempty()
более уместно, тогда они выдвигают собственное мнение о выразительности сценариев. Если вы находите условие в # 5 ниже неоднозначным, добавьте встроенный комментарий к своему коду - но я бы не стал. Суть в том, что нет никакого программного преимущества в выполнении вызова функции.Может ли ваше строковое значение содержать значение,
0
которое вы хотите считать истинным / действительным / непустым? Если это так, то вам нужно только проверить, имеет ли значение столбца длину.Вот демо с использованием
strlen()
. Это будет указывать, будет ли строка создавать значимые элементы массива в случае разнесения.Я думаю, что важно упомянуть, что, взорвавшись безоговорочно, вы ГАРАНТИРУЕТЕ создать непустой массив. Вот доказательство: Демонстрация Другими словами, проверка, является ли массив пустым, абсолютно бесполезен - он будет непустым каждый раз.
Если ваша строка НЕ МОЖЕТ содержать нулевое значение (потому что, скажем, это CSV, состоящий из идентификаторов, которые начинаются с
1
и только увеличиваются), тоif ($gamerow['players']) {
это все, что вам нужно - конец истории.... но подождите, что вы делаете после определения пустоты этой величины? Если у вас есть что-то, что ожидает
$playerlist
, но вы условно объявляете эту переменную, тогда вы рискуете использовать значение предыдущей строки или снова генерировать Notices. Так нужно ли безоговорочно декларировать$playerlist
что- то ? Если в строке нет достоверных значений, выиграет ли ваше приложение от объявления пустого массива? Скорее всего, ответ - да. В этом случае вы можете убедиться, что переменная имеет тип массива, возвращаясь к пустому массиву - таким образом, не имеет значения, если вы передадите эту переменную в цикл. Следующие условные объявления эквивалентны.$playerlist = $gamerow['players'] ? explode(',', $gamerow['players']) : [];
Почему я пошел так долго, чтобы объяснить эту самую основную задачу?
источник
источник
$matches = preg_grep ( "/^$text (\w+)/i" , $array ) ;
чтобы проверить это, я используюif ( count ( $matches ) > 0 )
empty()
выполняет слишком много работы.Я решил эту проблему с помощью следующего кода.
источник
Кажется, это работает для всех случаев
источник