PHP сравнивает строки в цикле с аналогичным текстом, но показывает только, является ли совпадение уникальным

#php #string #match #preg-match #matching

Вопрос:

У меня есть массив с названиями фильмов. Я хочу сопоставить названия этих фильмов с фильмами, которые у меня есть в базе данных. Кроме того, я провожу сравнение с функцией PHP similar_text (). Пока это работает нормально, но иногда для одного названия фильма существует более 100% совпадений. В этом случае я хочу исключить это сравнение, потому что позже я выполню сопоставление вручную. Я хочу работать только со спичками, я могу быть уверен, что это правильный выбор.

Чтобы показать совпадения со 100%, а также более чем на 80%, я использую переключатель / чехол. Поэтому, чтобы игнорировать те, у которых несколько совпадений, я попытался найти их с помощью регулярного выражения, а затем выполнить оператор if. Но мой подход не работает. Он по-прежнему показывает несколько 100% совпадений.

Вот мой подход до сих пор:

 $movies = array( // full of movie titles );
foreach ( $movies as $movie ) {
            $sim = similar_text($movie->title, $db_title, $perc);
            switch($perc) {
                case $perc == '100 %':
                    $preg = preg_match('|^(?=[^%s].*?[%s][^%s]*$)[0-9a-zA-Z_-s:;,.?!()p{L}(%s){1}]*$|u', $perc);
                    if ( $preg === 0) {
                        echo "$movie->title: $perc %n";
                        break;
                    } else {
                        echo "no usable match!n";
                        break;
                    }
                case $perc >= '80 %':
                    echo "$movie->title: $perc %n";
                    break;
                case $perc <= '80 %':
                    break;
            }
            
        }
 

Гугл мне на самом деле не помог. Вы найдете множество вопросов о самом similar_text, но не о том, как справиться со случаем, когда несколько строк совпадают на 100%.

У кого-нибудь есть идея?

Большое вам спасибо!

Правка (уточнение кода использования): У меня есть большой массив со многими названиями фильмов (и некоторыми другими материалами, связанными с фильмами) в нем. У меня также есть база данных со многими фильмами в ней. Поскольку у меня нет уникального идентификатора для сопоставления фильмов из массива с фильмами в БД, я хочу сопоставить заголовки с аналогичным текстом. Но иногда название фильма существует 3 раза с точным 100% совпадением. Я хочу найти эти случаи, чтобы я мог справиться с ними позже и просто работать с уникальными 100% совпадениями.

Комментарии:

1. Не уверен, что вы пытаетесь сделать, но если эта часть верна if ( $preg === 0) { , то совпадения нет. Это намеренно?

2. Хорошо, позвольте мне объяснить: у меня есть большой массив со многими названиями фильмов (и некоторыми другими вещами, связанными с фильмами) в нем. У меня также есть база данных со многими фильмами в ней. Поскольку у меня нет уникального идентификатора для сопоставления фильмов из массива с фильмами в БД, я хочу сопоставить заголовки с аналогичным текстом. Но иногда название фильма существует 3 раза с точным 100% совпадением. Я хочу найти эти случаи, чтобы я мог справиться с ними позже и просто работать с уникальными 100% совпадениями.

3. Таким образом, вы не знаете заранее, какие из них являются точными дубликатами, и вы узнаете это только после обработки всех данных, верно? Затем вы должны отслеживать совпадения и дубликаты. Регулярное выражение соответствует шаблону, который допускает более чем уникальную строку.

4. Хорошо, я понял, значит, мне нужно поработать над регулярным выражением? Я не очень хорошо знаком с регулярными выражениями. У вас есть пример или хороший ресурс, который мне помогает?

5. Например rexegg.com и regular-expressions.info и на этом есть много примеров. Но в вашем коде вы получаете значение, для $sim которого не используется. Затем вы включаете $perc то, что кажется переменной, отсутствующей в примере кода. Зачем вам регулярное выражение?