PHP判斷一個數組中是否有的鍵值為空?包括多維判空


一、for循環
    最簡單也是最直接的方法,用for循環來遍歷數組。對於已知維數的數組可以判斷,但如果是未知的多維數組,該怎么辦?
二、implode();
    用implode()將數組輸出為字符串,判斷輸出的字串是否為空。初看上去似乎是個不錯的方法,可惜跟上一點一樣,對於二維以上數組就不行了。舉個例子:

$arr= array(array(),array(),array());
$str = implode(',',$arr);

if(empty($str)) echo "空";
else echo "非空";

很明顯$arr是個含有三個空數組的二維數組,應該也算是空的,可是輸出的確是非空。判斷失敗。

 

三、count();
    不得不承認,我最先想到的也是這個函數,網上也有好多網友把這個當答案,並以為已經解決問題。可是請看下面的例子:

$arr= array("","","");
echo count($arr);


四、in_array('', $arr));
    不多說,還是看例子:

$arr= array("d","s","");
echo in_array('', $arr);

這個只能說明數組中有空的元素,不能證明數組是空的。很明顯也不行

 

五、empty();
    這個cpyeh覺得跟前面幾種方法差不多

$arr= array("","","");
if(empty($arr)) echo "空";
else echo "非空";


結果還是非空

可以在以上例子上加一句print_r($arr);看看...


  基本上cpyeh能想到的加上網上找到的也就以上這些,不明白的是網上居然有人會提到is_array(),可能是對php還不是很了解,需要多翻翻 手冊。很遺憾最終還是找不到一個完美的解決方法,不過對於一般的應用,第一種或第二種應該可以滿足了,cpyeh選了方便的第二種。如果對以上例子有疑問 歡迎留言在此互相交流。

 

 

后計:
如果判斷一個二維數組可以這樣,同時干掉那些空的:    

    

    $this->dataObj->getTotalScore(&$resultinfo,$uids);
        $judge = implode("",$resultinfo);
        if(!empty($judge))//數組不為空
        {  //去掉數組鍵值為空
          foreach($resultinfo as $key =>$getoutvisnull)
          {
            if(empty($getoutvisnull))
            {
              unset($resultinfo[$key]);
            }
          }
          $allscorearray[] = $resultinfo;
        }    


QQ群有哥們用下面函數來做這個事情:

 

function array_null($arr){
    if(is_array($arr)){
     foreach($arr as $k=>$v){
      if($v&&!is_array($v)){
        return false;
      }
       $t=array_null($v);
       if(!$t){
         return false;
       }
     }
     return true;
     }else{
       if(!$arr){
         return true;
       }
       return false;
     }
  }
  $node=array(array(),array(),array(array()));
  if(array_null($node)){
    echo "fdsa";
  }


用正則:

 

if (trim(preg_replace("/(\w+\s*=>\s*)?array\s*\(|\),\s+|\)$/i","",var_export($arr,true)))){
    echo 'true';
} else {
    echo "false";
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM