Я хочу проверить, существуют ли ВСЕ слова из $ words в одном или нескольких $ предложениях, порядок слов не важен.PHP strpos соответствует всем иглам в нескольких стогах сена
Слова будут содержать только [a-z0-9].
Предложения будут содержать только [a-z0-9-].
Мой код до сих пор, почти работает, как ожидалось:
$words = array("3d", "4");
$sentences = array("x-3d-abstract--part--282345", "3d-speed--boat-430419", "beautiful-flower-462451", "3d-d--384967");
foreach ($words as $word) {
$sentences_found = array_values(array_filter($sentences, function($find_words) use ($word) {return strpos($find_words, $word);}));
}
print_r($sentences_found);
Если запустить этот код здесь http://3v4l.org/tD5t5, вы получите 4 результаты, но в действительности это должно быть 3 результаты
Array
(
[0] => x-3d-abstract--part--282345
[1] => 3d-speed--boat-430419
[2] => beautiful-flower-462451 // this one is wrong, no "3d" in here, only "4"
[3] => 3d-d--384967
)
Как я могу это сделать?
Также есть ли лучший способ сделать это, чем strpos?
Regex?
Regex, возможно, медленный для этой работы, потому что иногда будет 1000 $ предложений (не спрашивайте почему).
huh? Я запускаю ваши коды, результат 'print_r()' is: 'Array ( [0] => this-is-simple-simple-sentence-123-aa99-311qwerty )' вместо 3 элементов – Raptor
вы уверены об этом? Я получаю все 3 результата с помощью print_r() – Sunny
@ Сонные работы также для меня! (См.: Http://3v4l.org/b2AoN) – Rizier123