2012-01-03 72 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 2012-01-03 17:48:58

+0

['var_dump()'](http://php.net/manual/en/function.var-dump.php)是你的朋友。 – 2012-01-03 17:51:08

+0

感謝您的回覆。當我做var_dump時,我得到了字符串(0)「」。 – 2012-01-03 17:56:29

回答

3

explode

如果分隔符是一個空字符串( 「」),爆炸()將返回FALSE。 如果delimiter包含未包含在字符串和一個負極限的值時,則返回一個空數組將被返回, 否則包含字符串的數組將被返回

<?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 

的問題是返回的數組包含一個空字符串的單個元素。

+0

這樣做的技巧,謝謝! – 2012-01-03 17:59:14

2

同時使用explodearray_filter您可以選擇縮小到有效令牌:

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 2012-01-03 18:07:07

+0

@johntully,考慮這個答案。可能會更好,我的。如果是這種情況,請檢查這個解決方案。 – danihp 2012-01-03 18:08:32

+0

@danihp:的確,只是給作者一種額外的過濾方法。我不確定是否存在是唯一的規定 - 這樣OP可以根據他/她自己的指標將其更改爲過濾。 – 2012-01-03 18:21:45