2011-04-29 43 views
2

我有一个逗号分隔的字符串,我需要能够搜索给定字符串的实例字符串。我用下面的功能:strpos和字符串搜索的字符串

function isChecked($haystack, $needle) { 
    $pos = strpos($haystack, $needle); 
    if ($pos === false) { 
     return null; 
    } else { 
     'return 'checked="checked"'; 
    } 
} 

例如:isChecked('1,2,3,4', '2')搜索如果2是字符串中和扁虱相应的复选框中的我的形式之一。

当谈到isChecked('1,3,4,12', '2')虽然,而不是返回NULL返回TRUE,因为它明显地发现内12字符2

我应该如何使用strpos函数才能得到正确的结果?

回答

5
function isChecked($haystack, $needle) { 
    $haystack = explode(',', $haystack); 
    return in_array($needle, $haystack); 
} 

您也可以使用正则表达式

+0

工作就像一个魅力,我现在看到了逻辑错误的地方。 – bikey77 2011-04-29 12:14:31

2

使用爆炸()可能是最好的选择,但这里的一种替代方案:

$pos = strpos(','.$haystack.',', ','.$needle.','); 
0

做可以分裂$haystack到数组的最简单方法并将阵列的每个元素与$needle进行比较。

观光使用[除使用你喜欢如果和功能]: explode() foreach strcmp trim

Funcion:

function isInStack($haystack, $needle) 
{ 
    # Explode comma separated haystack 
    $stack = explode(',', $haystack); 

    # Loop each 
    foreach($stack as $single) 
    { 
      # If this element is equal to $needle, $haystack contains $needle 
      # You can also use strcmp: 
      # if(strcmp(trim($single), $needle)) 
      if(trim($single) == $needle) 
      return "Founded = true";   
    } 
    # If not found, return false 
    return null; 
} 

实施例:

var_dump(isInStack('14,44,56', '56')); 

返回:

bool(true) 

例2:

var_dump(isInStack('14,44,56', '5')); 

返回:

bool(false) 

希望它能帮助。

+0

Emmerman使用in_array()比循环更有效 – 2011-04-29 11:54:06

+0

也许,但我想要显示替代方法 – Robik 2011-04-29 11:58:23

0
function isChecked($haystack, $needle) 
{ 
    $pos = strpos($haystack, $needle); 
    if ($pos === false) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 
+0

这实际上不仅仅是在'12'中找到'2'吗?它会解决问题还是只是重申它? – alimack 2014-08-06 09:17:16