Как найти строку, которая содержит подстроку другой строки в качестве подстроки в php?

$a = "The quick brown fox jumps over a lazy dog.";
$b = array("The lazy dog sleeps under the tree.", "...", ...);

Как я могу найти $b[0] который содержит "ленивую собаку" в строке $a? Проблема в том, что я не знаю заранее, что искомая подстрока - это "ленивая собака", что-то вроде array_intersect для массивов.

1 ответ

Решение

Этот Gist из github может потребовать небольшой настройки, но должен получить то, что вы хотите:

function longest_common_substring($words) {
    $words = array_map('strtolower', array_map('trim', $words));
    $sort_by_strlen = create_function('$a, $b', 'if (strlen($a) == strlen($b)) { return strcmp($a, $b); } return (strlen($a) < strlen($b)) ? -1 : 1;');
    usort($words, $sort_by_strlen);
    $longest_common_substring = array();
    $shortest_string = str_split(array_shift($words));
    while (sizeof($shortest_string)) {
        array_unshift($longest_common_substring, '');
        foreach ($shortest_string as $ci => $char) {
            foreach ($words as $wi => $word) {
                if (!strstr($word, $longest_common_substring[0] . $char)) {
                    break 2;
                }
            }
            $longest_common_substring[0] .= $char;
        }
        array_shift($shortest_string);
    }

    usort($longest_common_substring, $sort_by_strlen);
    return trim(array_pop($longest_common_substring));
}

// usage:
echo longest_common_substring(array('The quick brown fox jumped over the lazy dog', 'I jumped over the lazy bear'));
Другие вопросы по тегам