В принципе, у меня есть массив строк для поиска. Если бы это была только одна строка, stristr
бы отлично. Однако, поскольку это массив, единственное, что я могу придумать, – просто запустить цикл foreach и stristr
строка из каждой итерации.
Жаль, что есть лучший способ сделать это, я просто этого не знаю. Может кто-нибудь помочь мне здесь?
EDIT :
Например, скажем, у меня есть этот массив:
$array = array("string1", "foo", "bar", doowop");
и эта строка:
$string = "aw dang man lets go to that bar";
Мне нужно выяснить, содержит ли $string
одну из строк массива.
Ну, вам нужно будет пройти через массив, поскольку точкой функции stristr является возвращаемое значение.
Ближайшим является array_search
( docs ), но он не array_search
регистр. Или array_keys
( docs ). Вы не говорите, что хотите – первый будет останавливаться, как только найдет совпадение; последний вернет все матчи.
Вы можете использовать обратный вызов. Для примера существуют такие функции, как array_map
или array_walk
или array_walk_recursive
. Взгляните на http://ch2.php.net/manual/de/book.array.php
Надеюсь, это поможет.
Есть array_search
и array_search
но оба они чувствительны к регистру. Вы можете сделать это так:
$new_array = array_flip($your_array); //exchange keys for values $new_array = array_change_key_case($new_array); // lowercases everything $new_array = array_flip($new_array); // exchanges your values back $your_key = array_search($needle, $new_array); $original_value = $your_array[$your_key];
Не знаю, действительно ли это намного лучше, чем просто цикл:
Вы можете рассмотреть функцию preg_grep, и я думаю, что это точно решит вашу проблему. Вы также можете взглянуть на функции array_map , array_walk , array_walk_recursive , substr_count , array_search и in_array, если preg_grep не решит вашу проблему.