strpos и строка в поиске строк - PullRequest
2 голосов
/ 29 апреля 2011

У меня есть строка с разделителями-запятыми, и мне нужно иметь возможность искать в строке экземпляры данной строки. Я использую следующую функцию:

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 ]

5 голосов
/ 29 апреля 2011
function isChecked($haystack, $needle) {
    $haystack = explode(',', $haystack);
    return in_array($needle, $haystack);
}

Также вы можете использовать регулярные выражения

2 голосов
/ 29 апреля 2011

Использование explode () может быть лучшим вариантом, но есть альтернатива:

$pos = strpos(','.$haystack.',', ','.$needle.','); 
0 голосов
/ 29 апреля 2011
function isChecked($haystack, $needle) 
{
    $pos = strpos($haystack, $needle);
    if ($pos === false)
    {
        return false;
    } 
    else 
    {
        return true;
    }
}
0 голосов
/ 29 апреля 2011

Простейшим способом сделать это может быть разбиение $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;
}
* * Пример тысяча двадцать-один: * * 1 022
var_dump(isInStack('14,44,56', '56'));

Возвращает:

 bool(true)

Пример 2:

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

Возвращает:

 bool(false)

Надеюсь, это поможет.

...