2

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

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,因为它显然2在. 中找到了字符12

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

4

4 回答 4

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

你也可以使用正则表达式

于 2011-04-29T11:34:25.377 回答
2

使用 explode() 可能是最好的选择,但这里有一个替代方案:

$pos = strpos(','.$haystack.',', ','.$needle.','); 
于 2011-04-29T11:40:50.653 回答
0

最简单的方法可能是拆分$haystack为数组并将数组的每个元素与$needle.

使用的东西[除了你喜欢 if 和 function 使用的东西]: explode() foreach strcmp trim

功能:

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)

希望能帮助到你。

于 2011-04-29T11:47:41.083 回答
0
function isChecked($haystack, $needle) 
{
    $pos = strpos($haystack, $needle);
    if ($pos === false)
    {
        return false;
    } 
    else 
    {
        return true;
    }
}
于 2011-04-29T12:16:00.910 回答