найти начало строки внутри массива строк в php - PullRequest
1 голос
/ 18 сентября 2009

Я знаю, что у нас есть функция php in_array

но я ищу способ найти значения в массиве строк, начало которых соответствует определенной строке

например найти ...

$search_string = '<div>1</div>';

в массиве, подобном этому ...

$array = (
    'sample'  => '<div>1</div><p>fish food</p>',
    'sample2' => '<div>2</div><p>swine</p>
);

имеет ли это смысл

Ответы [ 5 ]

3 голосов
/ 18 сентября 2009

Попробуйте preg_grep() или array_filter().

2 голосов
/ 18 сентября 2009

Вы можете зациклить все строки массива и использовать strpos для каждой строки; примерно так:

$search_string = '<div>1</div>';
$array = array(
    'sample'  => '<div>1</div><p>fish food</p>',
    'sample2' => '<div>2</div><p>swine</p>'
);

foreach ($array as $key => $string) {
  if (strpos($string, $search_string) === 0) {
    var_dump($key);
  }
}

Что даст вам ключ строки, начинающейся с вашей строки поиска:

string 'sample' (length=6)


Или preg_grep тоже может помочь:

Возвращает массив, состоящий из элементы входного массива, соответствовать заданному шаблону.

Например:

$result = preg_grep('/^' . preg_quote($search_string, '/') . '/', $array);
var_dump($result);

(не забудьте использовать preg_quote!)

Получит вас:

array
  'sample' => string '<div>1</div><p>fish food</p>' (length=28)

Обратите внимание, что таким образом вы получаете не ключ, а только содержимое строки.

1 голос
/ 13 июля 2016

Если вам нужно только узнать, начинается ли какая-либо строка в пределах $array с $search_string (в основном альтернатива in_array () , которая проверяет начало строки), вы также можете использовать array_reduce ()

array_reduce($array, function ($contains, $item) use ($search_string) {
    return $contains = $contains || (strpos($search_string, $item) === 0);
}, false);
0 голосов
/ 18 сентября 2009

Почему бы вам просто не перебрать массив и проверить с помощью регулярного выражения, или strstr, или substr (...) == $ search_string?

$res = "";
foreach($array as $key => $value) {
  if(substr(0, strlen($search_string)-1, $value) == $search_string) {
    $res = $key;
    break;
  }
}
0 голосов
/ 18 сентября 2009

Для этого вам нужно использовать регулярные выражения. Проверьте это учебник .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...