Использование массива в качестве иглы в strpos - PullRequest
74 голосов
/ 09 июня 2011

Как вы используете strpos для массива игл при поиске строки?Например:

$find_letters = array('a', 'c', 'd');
$string = 'abcdefg';

if(strpos($string, $find_letters) !== false)
{
    echo 'All the letters are found in the string!';
}

Потому что, при использовании этого, это не будет работать, было бы хорошо, если бы было что-то вроде этого

Ответы [ 14 ]

0 голосов
/ 15 мая 2018

Просто обновление выше ответов

function strsearch($findme, $source){
    if(is_array($findme)){
        if(str_replace($findme, '', $source) != $source){
            return true;
        }
    }else{
        if(strpos($source,$findme)){
            return true;
        }
    }
    return false;
}
0 голосов
/ 15 ноября 2017

Ответить @binyamin и @Timo .. (недостаточно точек для добавления комментария ..), но результат не содержит позицию ..
Код ниже вернет фактическую позицию первого элемента, которыйэто то, что strpos предназначен для.Это полезно, если вы ожидаете найти ровно 1 совпадение. Если вы ожидаете найти несколько совпадений, то позиция первого найденного может быть бессмысленной.

function strposa($haystack, $needle, $offset=0) {
    if(!is_array($needle)) $needle = array($needle);
    foreach($needle as $query) {
      $res=strpos($haystack, $query, $offset);
      if($res !== false) return $res; // stop on first true result
    }
    return false;
}
0 голосов
/ 05 ноября 2016

Я пишу новый ответ, который, надеюсь, поможет любому, кто ищет что-то похожее на меня.

Это работает в случае «У меня несколько игл, и я пытаюсь использовать их, чтобы найтивыделенная строка ".и вот вопрос, с которым я столкнулся, чтобы выяснить это.

    $i = 0;
    $found = array();
    while ($i < count($needle)) {
        $x = 0;
        while ($x < count($haystack)) {
            if (strpos($haystack[$x], $needle[$i]) !== false) {
                array_push($found, $haystack[$x]);
            }
            $x++;
        }
        $i++;
    }

    $found = array_count_values($found);

Массив $found будет содержать список всех совпадающих игл, элемент массива с наибольшим значением счетчика будет строкой(s) вы ищете, вы можете получить это с:

print_r(array_search(max($found), $found));
0 голосов
/ 09 июня 2011

С помощью следующего кода:

$flag = true;
foreach($find_letters as $letter)
    if(false===strpos($string, $letter)) {
        $flag = false; 
        break;
    }

Затем проверьте значение $flag.Если это true, все буквы были найдены.Если нет, то это false.

...