Подтвердить что ты не робот

Как проверить, имеет ли ассоциативный массив пустое или нулевое значение

В следующем ассоциативном массиве

$array = array(
    [0] => 0
    [1] => 1
    [2] => 
    [3] => 2
    [4] => 
)

как вы можете определить, имеет ли данный ключ пустое (или нулевое) значение? Я использовал

if(empty($array[$value])) 

и

if(isset($array[$value])) && $array[$value] !=='')

При использовании empty я также получаю false для первого значения массива, которое равно нулю, а isset, похоже, не выполняет трюк.

4b9b3361

Ответ 1

используйте array_key_exists() и is_null() для что. Он вернет TRUE, если ключ существует и имеет значение, далекое от NULL

Difference:

$arr = array('a' => NULL);

var_dump(array_key_exists('a', $arr)); // -->  TRUE
var_dump(isset($arr['a'])); // -->  FALSE

Итак, вы должны проверить:

if(array_key_exists($key, $array) && is_null($array[$key])) {
    echo "key exists with a value of NULL";
}

Ответ 2

Посмотрел все ответы и мне они не нравятся. Разве это не намного проще и лучше? Это то, что я использую:

  if (in_array(null, $array, true) || in_array('', $array, true)) {
    // There are null (or empty) values.
  }

Обратите внимание, что установка третьего параметра как истинного означает строгое сравнение, это означает, что 0 не будет равен нулю - однако, также не будут пустые строки ('') - вот почему у нас есть два условия. К сожалению, первый параметр в in_array должен быть строкой и не может быть массивом значений.

Ответ 3

PHP пустых возвращаемых значений состояний:

Возвращает FALSE, если var существует и имеет непустое ненулевое значение. В противном случае возвращает TRUE.

Следующие вещи считаются пустыми:

"" (пустая строка)

0 (0 как целое число)

0.0 (0 как поплавок)

"0" (0 в виде строки)

НОЛЬ

ЛОЖНЫЙ

array() (пустой массив)

$ Var; (объявленная переменная, но без значения)

Из вашего примера массива я понимаю, что вы хотите исключить 0 как целое число. Если это так, то это сделает свое дело:

<?php
    $array = array(0, 1, '', 2, '');

    foreach ($array as $value) {
        echo (empty($value) && 0 !== $value) ? "true\n" : "false\n";
    }

Если вы хотите исключить другие условия, которые рассматриваются empty просто отмените их в этом условии. Примите во внимание, что это может быть не оптимальным решением, если вы хотите проверить другие значения.

Ответ 4

if ( !isset($array[$key]) || $array[$key] == "" || is_null($array[$key]) )
{
    //given key does not exist or it has "" or NULL value
}

Ответ 5

foreach($array as $i => $v) {
    if(null === $v) {
        // this item ($array[$i]) is null
    }
}

... или для заданного ключа:

if(null === $array[2]) {
     // this item ($array[2]) is null
}

Ответ 6

Потенциально это могло бы быть более чистым, если бы я знал, как был создан массив, но, предположив, что вы можете иметь как пустые строки, так и нули в массиве, и вы хотите учитывать значения 0 → здесь, что Я бы сделал:

if (is_null($array[$key]) || (string)$array[$key] == '')

Вот немного тестового кода, показывающего его в действии с массивом, который имеет как 0, нуль, пустую строку, так и ненулевые целые числа...

$array = array(0,1,null,2,'');
print_r($array);

foreach ($array as $key => $val) {
         if (is_null($array[$key]) || (string)$array[$key] == '') {
           echo $key.", true\n";
         }
}

Что касается использования isset() - считается, что пустая строка задана. Это может быть то, что вы используете (кроме 0 считаются пустыми) Сравните с этим использованием:

$foo = array(0,1,null,2,'');

print_r($foo);
foreach ($foo as $key => $val) {
        if (isset($foo[$key])) {
                echo $key.", true\n";
        }
}