2012-01-03 10 views
3

mysqlのテーブルからデータを取得しています。値は|セパレータ
例:
test 1|test 2|test 4など。 空白のエントリがある場合を除いて、すべてがうまくいきます。私は次のコードを使用しています。分解値のカウントが0より大きいかどうかをチェック

$groups = explode('|', $row['groups']); 
if(count($groups) >0) 
{ 
    echo 'There are values'; 

}else{ 
    echo 'No values'; 
} 

私が持っている問題は、この列が空の場合でも「値があります」を返しています。
ご協力いただければ幸いです。

+0

は、それは文字列はパイプが、値が含まれていることは可能ですか? – amosrivera

+0

['var_dump()'](http://php.net/manual/en/function.var-dump.php)はあなたの友人です。 –

+0

返信いただきありがとうございます。私はvar_dumpを実行するときにstring(0) ""を取得します。 –

答えて

3

explode

区切り文字は、空の文字列( "")、爆発が(ある場合)はFALSEを返します。区切り文字が文字列に含まれていない値が含まれており、負の制限が使用され、その後、空の配列が返される、 場合 を、そうでなければ、文字列を含む配列は、問題がある

<?php 
$g = ""; 
$e = explode('|',$g, -1) ; 
if ($e) print "yes 1"; else print "Non 1"; 

$g = ""; 
$e = explode('|',$g, 1) ; 
if ($e) print "yes 2"; else print "Non 2"; 

?> 

Non 1 
yes 2 

が返されます返される配列に空の文字列である単一の要素が含まれていることを確認します。あなたは有効なトークンにオプションを絞り込むことができexplodearray_filterの両方を使用して

+0

それはトリックをした、ありがとう! –

2

function count_tokens($field) 
{ 
    $tokens = array_filter(explode('|',$field),create_function('$a','return !empty($a);')); 
    return sizeof($tokens); 
} 

Demo

  = 0 tokens 
Foo  = 1 tokens 
Foo|Bar = 2 tokens 
|   = 0 tokens 
||   = 0 tokens 
Foo||Bar = 2 tokens 
Foo|Bar| = 2 tokens 
|Foo|Bar = 2 tokens 
+0

+1!いいね何について:array_filter(explode( '|'、$ var)、 "strlen"); ? – danihp

+0

@johntully、この回答を考慮に入れてください。私のほうが良いかもしれません。その場合は、解決策としてこれをチェックしてください。 – danihp

+0

@danihp:確かに、著者にフィルタリングの追加の方法を与えるだけでした。私は存在が唯一の規定であるかどうかはわかりませんでした。この方法でOPは自分のメトリクスに基づいてフィルタリングを変更することができます。 –