У меня есть строка, подобная abcdefg123hijklm
. У меня также есть массив, который содержит несколько строк. Теперь я хочу проверить свой abcdefg123hijklm
и посмотреть, есть ли 123
из abcdefg123hijklm
в массиве. Как я могу это сделать? Я предполагаю, что in_array()
работает?
Благодаря?
Итак, вы хотите проверить, есть ли какая-либо подстрока этой конкретной строки (разрешает вызов $searchstring
) в массиве? Если это так, вам нужно будет перебирать массив и проверять подстроку:
foreach($array as $string) { if(strpos($searchstring, $string) !== false) { echo 'yes its in here'; break; } }
См .: http://php.net/manual/en/function.strpos.php
Если вы хотите проверить, есть ли в массиве определенная часть String, вам нужно будет использовать substr()
чтобы отделить эту часть строки, а затем использовать in_array()
чтобы найти ее.
Другим вариантом было бы использовать регулярные выражения и implode, например:
if (preg_match('/'.implode('|', $array).'/', $searchstring, $matches)) echo("Yes, the string '{$matches[0]}' was found in the search string."); else echo("None of the strings in the array were found in the search string.");
Это немного меньше кода, и я ожидал бы, что он будет более эффективным для больших строк поиска или массивов, поскольку строку поиска нужно будет анализировать один раз, а не один раз для каждого элемента массива. (Хотя вы добавляете накладные расходы на implode.)
Единственным недостатком является то, что он не возвращает индекс массива соответствующей строки, поэтому цикл может быть лучшим вариантом, если вам это нужно. Однако вы также можете найти его с кодом выше, за которым следует
$match_index = array_search($matches[0], $array);
Изменить: обратите внимание, что это предполагает, что вы знаете, что ваши строки не будут содержать специальные символы регулярного выражения. Для чисто буквенно-цифровых строк, таких как ваши примеры, которые будут истинными, но если у вас будут более сложные строки, вам сначала придется сбежать от них. В этом случае другое решение, использующее цикл, вероятно, будет проще.
Вы можете сделать это обратным образом. Предположим, что ваша строка $ string и array – $ array.
foreach ($array as $value) { // strpos can return 0 as a first matched position, 0 == false but !== false if (strpos($string, $value) !== false) { echo 'Matched value is ' . $value; } }
Используйте это, чтобы получить свои номера
$re = "/(\d+)/"; $str = "abcdefg123hijklm"; preg_match($re, $str, $matches);
и (123 может быть $ match [1] сверху):
preg_grep('/123/', $array);