Как проверить, имеет ли массив PHP какое-либо значение?
Я работаю над формой регистрации, я использую PHP, а на моей части обработки запускаю некоторый код, если переданный элемент не удается, я затем добавляю его в массив ошибок.
Ниже приведен фрагмент кода, я нахожусь в точке, где мне нужно найти лучший метод, чтобы определить, должен ли я запускать ошибку.
Итак, если в массиве ошибок задано значение, мне нужно перенаправить и сделать некоторые другие вещи.
Я думал об использовании isset
или еще is_array
, но я не думаю, что это ответ, так как я устанавливаю массив с помощью **$signup_errors = array()**
, не означает ли это, что значение is_array
истинно?
Кто-нибудь может предложить хороший способ сделать это?
//at the beginning I set the error array
$signup_errors = array();
// I then add items to the error array as needed like this...
$signup_errors['captcha'] = 'Please Enter the Correct Security Code';
Ответы
Ответ 1
if ($signup_errors) {
// there was an error
} else {
// there wasn't
}
Как это работает? При преобразовании в boolean пустой массив преобразуется в false. Каждый другой массив преобразуется в true. Из руководства PHP:
Преобразование в boolean
Чтобы явно преобразовать значение в boolean, используйте (bool) или (boolean) слепки. Однако в большинстве случаев литье не имеет никакого значения, поскольку значение будет автоматически преобразуется, если оператор, функция или управление Структура требует логического аргумента.
См. также Тип Жонглирование.
При преобразовании в boolean следующие значения считаются FALSE:
- сама логическая ЛОЖЬ
- целое число 0 (ноль)
- поплавок 0.0 (ноль)
- пустая строка и строка "0"
- массив с нулевыми элементами
- объект с нулевыми переменными-членами (только для PHP 4)
- специальный тип NULL (включая неустановленные переменные)
- Объекты SimpleXML, созданные из пустых тегов
- Каждое другое значение считается TRUE (включая любой ресурс).
Вы также можете использовать empty()
, поскольку он имеет схожую семантику.
Ответ 2
Возможно empty()?
Из Документов:
Возвращаемые значения
Возвращает FALSE, если var имеет непустую и ненулевое значение.
Считается, что пусто:
"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)
Ответ 3
Убедитесь, что...
if(count($array) > 0) { ... }
... если это так, то устанавливается по крайней мере одна пара ключ-значение.
Кроме того, проверьте, не массив ли():
if(!empty($array)) { ... }
Ответ 4
Вы можете проверить как минимальное, так и максимальное значения массива, в этом случае у вас может быть большой массив, заполненный ключами и пустым значением, и вам не нужно выполнять итерацию через каждую пару значений ключа
if(!min($array) && !max($array)) { ... }
Ответ 5
Конструкция языка isset() предназначена для тестирования, чтобы определить, установлены ли переменные и элементы массива, а не NULL. Использование is_array() подскажет вам, является ли аргумент, который вы ему передаете, массивом. Таким образом, я не думаю, что использование isset() или is_array() даст вам правильный и желаемый результат, который вы ищете.
Код:
$signup_errors = array();
означает, что...
is_array($signup_errors);
вернет true. Однако это не означает, что правила булевого языка PHP будут оцениваться....
if($signup_errors)
{
//*Do something if $signup_errors evaluates to true*;
}
как true, если к нему не добавлены некоторые элементы. Когда вы это сделаете,
$signup_errors['captcha'] = 'Please Enter the Correct Security Code';
вы выполнили требование языка PHP для массива выше, чтобы оценить значение true.
Теперь, если по какой-то причине вы хотели или хотели использовать isset() для элементов массива в будущем, вы могли бы. Но для этого случая достаточно условного утверждения выше.
Ответ 6
Используйте array_filter, если у вас уже есть ключи, но вы хотите проверить небулевые оценочные значения.
<?php
$errors = ['foo' => '', 'bar' => null];
var_dump(array_filter($errors));
$errors = ['foo' => 'Oops', 'bar' => null];
var_dump(array_filter($errors));
Вывод:
array (size=0)
empty
array (size=1)
'foo' => string 'Oops' (length=4)
Использование:
<?php
if(array_filter($errors)) {
// Has errors
}