Как проверить, имеет ли массив 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
}