У меня есть массив $ var, и я бы хотел возвратить FALSE, если один или несколько элементов в массиве пустые (я имею в виду, что строка "").
Я думаю, что array_filter()
– лучший способ, но я не знаю, как его фильтровать таким образом.
Как мне это сделать?
function emptyElementExists($arr) { return array_search("", $arr) !== false; }
Пример:
$var = array( "text1", "", "text3" ); var_dump( emptyElementExists($var) );
Вывод:
BOOL (истина)
Справка
if (array_search('', $var)!==false) return FALSE;
Если вы хотите иметь функцию, которая проверяет, является ли элемент в массиве ложным, вы можете написать свою собственную функцию, которая:
Array_filter принимает массив и функцию, затем выполняет итерацию через массив и отправляет в каждый элемент указанной функции. Если функция возвращает true, элемент хранится в массиве, и если функция возвращает false, элемент извлекается из массива.
Вы видите разницу, верно?
Или явно, как было предложено @Ancide:
$var = array("lorem", "ipsum", "dolor"); $emptyVar = array("lorem", "", "dolor"); function has_empty($array) { foreach ($array as $value) { if ($value == "") return true; } return false; } echo '$var has ' . (has_empty($var) ? 'empty values' : 'no empty values'); echo '<br>'; echo '$emptyVar has ' . (has_empty($emptyVar) ? 'empty values' : 'no empty values');
РЕДАКТИРОВАТЬ:
Сначала я не был уверен, если array_search()
останавливается при первом вхождении. После проверки источника PHP кажется, что array_search()
должен быть быстрее (и короче). Таким образом, вариант @ Wh1T3h4Ck5 был бы предпочтительнее, я полагаю.
Если вы действительно хотите проверить, существует ли одна или несколько пустых строк, это просто. Ты можешь сделать,
in_array('', $var, true);
Он возвращает true, если пустая строка ( ''
) существует по крайней мере в одном из значений массива, иначе false. Вы также можете сослаться на этот аналогичный вопрос, как проверить, имеет ли массив значение === null без цикла?