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し、フォームの1つで適切なチェックボックスをオンにします。

ただし、返されるのでは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

爆発()を使用するのが最良のオプションかもしれませんが、別の方法があります:

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

それを行う最も簡単な方法は、配列に分割$haystackし、配列の各要素を と比較すること$needleです。

使用されたもの [if と関数のように使用されたものを除く]: 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 に答える