Как проверить что все элементы массива пустые?
Есть массив:
$error = ['url' => null, 'title' => null, 'icon' => null, 'color' => null];
С его помощью я проверяю форму, и если есть ошибки, я в соответствующий элемент массива записываю строку с текстом ошибки.
Например:
Если поле url пустое, тогда массив будет выглядеть так:
Array
(
[url] => Это поле обязательно к заполнению
[title] =>
[icon] =>
[color] =>
)
Сейчас я проверяю так:
if (empty($error['url']) and empty($error['title']) and empty($error['icon']) and empty($error['color'])) {
'Отправляю форму'
}
Как проверить, что все элементы массива пустые более лучшим способом?
Может есть стандартная функция, которая проверяет на пустоту все элементы массива?
Ответы (4 шт):
$error = ['url' => null, 'title' => "2", 'icon' => null, 'color' => null];
print_r(array_diff($error, array(''))); // Если возвращается пустой массив, значит нет значений. В противном случае вернёт то, которое не пустое.
<?php
$error = ['url' => null, 'title' => "2", 'icon' => null, 'color' => null];
$Empty = ""; // Переменная со значением для вывода
foreach ($error as $key=>$value){ // проверяем массив
if ($value){
$Empty = 'есть не пустые значения';
break;
} else {
$Empty = 'Все значения пустые';
}
}
print_r($Empty); // Выводим сообщение
Можно сделать через array_filter (возвращает все найденные сравнения)
<?php
$error = ['url' => null, 'title' => "2", 'icon' => 2, 'color' => null];
$filter = array_filter($error, function($item) {
return $item === null;
});
if (empty($filter))
echo "Все поля заполнены";
else
foreach($filter as $key => $value) {
echo "Поле '{$key}' не заполнено" . PHP_EOL;
}
Можно через array_search (возвращает первый найденный элемент)
<?php
$error = ['url' => null, 'title' => "2", 'icon' => 2, 'color' => null];
$search = array_search(null, $error);
if ($search)
echo "Поле '{$search}' не заполнено";
Можно через in_array (возвращает bool)
<?php
$error = ['url' => null, 'title' => "2", 'icon' => 2, 'color' => null];
$inArray = in_array(null, $error);
if ($inArray === true)
echo "Не все поля заполнены";
$array = ['url' => null, 'title' => null, 'icon' => null, 'color' => null];
if (empty(array_filter(array_values($array)))) {
// не заполнено 1 и более полей
}
$error = [
'url' => null,
'title' => 'Это поле ...',
'icon' => null,
'color' => 'Это поле ...'
];
$e = [];
foreach ($error as $k => $v) {
if ($v) {
array_push($e, $k);
}
}
Или проще:
$e = array_keys($error, !null);
Если все элементы $error пустые, массив $e останется пустым, иначе будет содержать значения ключей c непустыми значениями $error
// print_r($e);
Array
(
[0] => title
[1] => color
)