Question

I have a comma delimited string and I need to be able to search the string for instances of a given string. I use the following function:

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

Example: isChecked('1,2,3,4', '2') searches if 2 is in the string and ticks the appropriate checkbox in one of my forms.

When it comes to isChecked('1,3,4,12', '2') though, instead of returning NULL it returns TRUE, as it obviously finds the character 2 within 12.

How should I use the strpos function in order to have only the correct results?

Was it helpful?

Solution

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

Also you can use regular expressions

OTHER TIPS

Using explode() might be the best option, but here's an alternative:

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

Simplest way to do it may be splitting $haystack into array and compare each element of array with $needle.

Things used [except used by you like if and function]: 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;
}

Example:

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

Returns:

 bool(true)

Example 2:

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

Returns:

 bool(false)

Hope it helps.

function isChecked($haystack, $needle) 
{
    $pos = strpos($haystack, $needle);
    if ($pos === false)
    {
        return false;
    } 
    else 
    {
        return true;
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top