2009-08-30 17 views
0

私は配列を持っていますが、いくつかは多次元でもあります。すべての値がNULLかどうかを知る方法が必要です。配列のすべての値(および配列内の配列の値)がNULLかどうかを判断する最も効率的で効果的な方法は何でしょうか?PHP配列検索の質問

だから、基本的には:検索配列、すべての値がNULLであれば、$フラグ=真

EDIT:それが行う場合値は、NULLは、MySQLのコンテキストにあるMySQLデータベースから引き出されています差。

答えて

3

の2番目のパラメータとして渡しする電子再帰的に行わ:

arrayIsFullyNull ($arr) 
{ 
    if (is_array($arr)) 
     foreach ($arr as $val) 
     if (!arrayIsFullyNull($val)) 
      return false; 
    else if (!is_null($arr)) 
     return false; 
    else 
     return false; // it's not null, and not array => value 

    return true; 
} 
0

はあなたのためにそのフラグを使用するかに依存しますが、私は最高のは、それは、何かをするための簡単な方法を述べ

select col1,col2,col3 from table where col1 is not null and col2 is not null 
and col3 is not null 

のような唯一の非null値を取得してデータベースを照会することだと思いますPHPでそのよう

//array_filter filters values that evaulate to fals 
$result = array_filter($input); 
if (count($result) == 0) { $flag = true; } 

このは多次元配列のためを失敗し、これはあなたが肝炎の場合であれば、自動的にfalseに変換されますゼロまたは他の値は、あなたの配列に有効な値である場合になりますことができます

function isEmptyArray($array){ 
    foreach($array as $val) 
     if((is_array($val) && !isEmptyArray($val))||(!is_array($val) && $val!="")) return false; 
    return true; 
} 
0

:再帰的コールバック関数を構築し、私はあなたがこのように機能を使用できるようにデシベルヌルフィールドは、PHPで空の文字列になってよく覚えている場合array_filter.

+0

基本的には正しいですが、これは機能しません... nullを含む配列を渡すと、最初のステートメントでfalseを返します... – back2dos

+0

固定...私は願っています:Pありがとう – Aziz

0

あなたはそれが(これはNULLを含みます)はfalseに等しい値を取り除き、デフォルトでは、array_filter()機能を見てみたいことがあります。

多次元配列の場合と同じように動作するかどうかはわかりませんが、コールバック関数を使用すると簡単にそれを処理できるオプションがあります。

Array_filterを配列に対して実行すると空の配列が返された場合、すべての値はNULLまたはfalseとなります。これらの値を厳密に区別する必要がある場合は、コールバック。

0

RecursiveArrayIteratorを使用すると、すべての値(ネストされた配列のツリーの葉)を処理できます。

未テストコード:

function isNullOrNestedArrayOfNulls($array) 
{ 
    if (is_null($array) 
    { 
    return true; 
    } 
    else if (!is_array($array)) 
    { 
    return false; 
    } 

    $allNull = true; 
    $iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), 
             RecursiveIteratorIterator::LEAVES_ONLY); 

    while ($iter->valid()) 
    { 
    if (!is_null($iter->current()) 
    { 
     $allNull = false; 
     break; 
    } 
    } 

    return $allNull; 
} 

これは(PHPではなく、非効率的であるという評判を有する)再帰関数を回避するという利点を有するであろう。