簡體   English   中英

如何檢查關聯數組是否具有空值或 null 值

[英]How to check if an associative array has an empty or null value

在下面的關聯數組中

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

如何確定給定鍵是否具有空(或空)值? 我用了

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

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

當使用empty時,第一個數組值也為false ,它是零,而isset似乎沒有用。

使用array_key_exists()is_null() 如果密鑰存在並且其值遠離NULL ,則它將返回TRUE

區別:

$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";
}

看着所有答案,我不喜歡他們。 這不是更簡單,更好嗎? 這就是我正在使用的:

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

請注意,將第三個參數設置為true意味着嚴格比較,這意味着0將不等於null - 但是,也不會清空字符串('') - 這就是為什么我們有兩個條件。 不幸的是,in_array中的第一個參數必須是一個字符串,不能是值數組。

PHP 返回值狀態:

如果var存在且具有非空的非零值,則返回FALSE。 否則返回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認為只是在那種情況下否定它們。 請注意,如果要檢查其他值,這可能不是最佳解決方案。

if ( !isset($array[$key]) || $array[$key] == "" || is_null($array[$key]) )
{
    //given key does not exist or it has "" or NULL value
}
foreach($array as $i => $v) {
    if(null === $v) {
        // this item ($array[$i]) is null
    }
}

......或者,對於給定的密鑰:

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

如果我知道數組是如何構造的,這可能會更清晰,但是,假設你可以同時擁有空字符串或數組中的空值,並且你想要考慮0的值 - >這就是我的意思做:

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

這里有一些測試代碼,它顯示了一個包含0,null,空字符串和非零整數的數組的動作...

$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";
        }
}
 function is_empty($data){
    $is_empty = true;
    foreach ($data as $val){
       if(is_array($val)){
          $is_empty = is_empty($val);
       }else{
          if(!empty($val)){
             $is_empty = false;
             break;
          }
       }
    }
    return $is_empty;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM