Как проверить, имеет ли ассоциативный массив пустое или нулевое значение
В следующем ассоциативном массиве
$array = array(
[0] => 0
[1] => 1
[2] =>
[3] => 2
[4] =>
)
как вы можете определить, имеет ли данный ключ пустое (или нулевое) значение? Я использовал
if(empty($array[$value]))
и
if(isset($array[$value])) && $array[$value] !=='')
При использовании empty
я также получаю false
для первого значения массива, которое равно нулю, а isset
, похоже, не выполняет трюк.
Ответы
Ответ 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";
}
}