Найти совпадение чисел через запятую в другой строке чисел через запятую

298
07 августа 2017, 12:53

Подскажите, пожалуйста, как можно проверить совпадение чисел:

691,695,696,697

в данной строке чисел:

691,695,696,697,698,699,692,700,701,702,703,704,693,694,705,685

Хотел проверить с помощью in_array, но тут не подойдет.

После отработки кода PHP:

переменная $ids равняется значению 691,695,696,697

Переменная $ids_class равняется значению 691,695,696,697,698,699,692,700,701,702,703,704

Answer 1

@Эдуард пытался дать ответ с использованием регулярки, но не вышло.

Вот мой вариант:

<?php
$ids = '691,696,695,697';
$ids_class = '6911,695,696,697,698,699,692,700,701,702,703,704';
if (preg_match_all('%(?<!\d)('. str_replace(',', '|', $ids) .')(?!\d)%', $ids_class, $matches)) {
    var_dump($matches[1]);
} else {
    echo 'Совпадений не найдено.';
}

Регулярка выглядит так:

%(?<!\d)(691|696|695|697)(?!\d)%

(691|696|695|697) - группа для поиска совпадений с нужными числами;
(?<!\d) и (?!\d) - негативные просмотры назад и вперед для проверки отсутствия цифр перед и после найденного числа (чтобы при поиске 691 не было захвата части числа 6911).

Результат работы:

array(3) {
  [0]=>
  string(3) "695"
  [1]=>
  string(3) "696"
  [2]=>
  string(3) "697"
}
Answer 2

Можно сделать как советует Алексей Шиманский в комментарии

$arr1 = explode(',', '691,695,696,697');
$arr2 = explode(',', '691,695,696,697,698,699,692,700,701,702,703,704');
foreach ($arr1 as $search) {
    if (in_array($search, $arr2)) {
         echo "founded $search \n";
    }
}

или же можно найти пересечение массивов

$arr1 = explode(',', '691,695,696,697');
$arr2 = explode(',', '691,695,696,697,698,699,692,700,701,702,703,704');
var_dump(array_intersect($arr1, $arr2));
Answer 3

Если вы оперируете со строками, то можно воспользоваться регулярными выражениями:

<?php
$ids = '691,695,696,697';
$ids_class = '691,695,696,697,698,699,692,700,701,702,703,704';
echo findNumbers($ids, $ids_class);

function findNumbers($id, $class) {
    $pattern = '~(?<=\D|^)(?:'. strtr($id, ',', '|') .')(?=\D|$)~';
    if (preg_match_all($pattern, $class, $arr)) {
        return 'Найдено совпадение:<hr />'. join(', ', $arr[0]);
    } else {
        return 'Совпадений не найдено.';
    }
}
READ ALSO
OpenCart | E-mail введен неверно

OpenCart | E-mail введен неверно

Здравствуйте! Сайт отказывается принимать любой email, не даёт регистрировать пользователей, как исправить этот момент, с чем может быть связана...

560
array_merge динамичиские переменные

array_merge динамичиские переменные

Подскажите пжс как можно заменить кол-во элементов в array_merge на автоматичесую подстановку, тк

387
Загрузка файлов Wordpress

Загрузка файлов Wordpress

Нужно дать право неавторизированным пользователям загружать только картинки на серверИспользую js код

414
Как разделить файлы в yii2

Как разделить файлы в yii2

Всем привет, вопрос по yii2Куда можно вынести такие функции в базовом шаблоне yii? Сейчас они лежать в SiteController

326