W3docs

similar_text()

Статья о функции PHP similar_text(), которая вычисляет степень сходства двух строк и возвращает количество совпадающих символов.

Функция PHP similar_text() измеряет степень схожести двух строк. Вместо простого сравнения «да/нет» она подсчитывает количество совпадающих символов и может выражать это совпадение в процентах. Это делает её полезной для нечёткого сопоставления: обнаружения почти дублирующихся записей, предложений исправлений вида «вы имели в виду…?» или ранжирования результатов поиска по степени близости.

В этой главе рассматриваются синтаксис, возвращаемое значение, необязательный аргумент для процентного показателя, особенности поведения функции и практический пример, который можно запустить.

Синтаксис

similar_text(string $string1, string $string2, float &$percent = null): int

Функция принимает три параметра:

  • $string1 и $string2 — две сравниваемые строки.
  • $percent — необязательный. Если передать сюда переменную, она будет передана по ссылке и получит значение процентного сходства (float от 0 до 100).

Возвращаемое значение — целое число: количество совпадающих символов между двумя строками, найденных с помощью алгоритма наибольшей общей подстроки, применяемого рекурсивно.

Как вычисляется процент

Процент вычисляется по формуле: (matches * 2) / (length1 + length2) * 100. Значение 100 означает, что строки идентичны, а 0 — что у них нет ничего общего. Поскольку формула использует длины обеих строк, процент одинаков вне зависимости от порядка передачи строк.

Базовый пример

php— editable, runs on the server

Мы инициализируем $percent значением 0, чтобы PHP не выводил предупреждение о «неопределённой переменной», а затем передаём её по ссылке. Вывод:

6
60

Две строки имеют 6 совпадающих символов (Hello — слово «Hello» и пробел), что соответствует 60% сходства.

На что обратить внимание

Функция чувствительна к регистру. Строки 'Hello' и 'hello' не считаются одинаковыми — первые символы различаются. Если регистр следует игнорировать, нормализуйте строки с помощью strtolower():

<?php
$a = strtolower('Hello');
$b = strtolower('hello');
similar_text($a, $b, $percent);
echo $percent; // 100
?>

Переменная для процента должна существовать заранее. Поскольку $percent передаётся по ссылке, объявите её перед вызовом (например, $percent = 0;), чтобы избежать предупреждений.

Порядок аргументов не влияет на процент, но производительность имеет значение. similar_text() дороже простого сравнения из-за рекурсивного алгоритма. Для очень длинных строк или больших наборов данных перед использованием в критических участках кода проведите профилирование.

similar_text() vs. levenshtein()

Обе функции измеряют сходство строк, но отвечают на разные вопросы:

  • similar_text() подсчитывает совпадающие символы и возвращает показатель сходства — чем выше, тем больше сходство.
  • levenshtein() подсчитывает правки (вставки, удаления, замены), необходимые для преобразования одной строки в другую — чем меньше, тем больше сходство.

Используйте similar_text(), когда нужен процент близости; используйте levenshtein(), когда важно, сколько нажатий клавиш разделяют две строки, например при проверке правописания.

Заключение

Функция similar_text() — практичный инструмент для нечёткого сравнения строк. Она возвращает целое число совпадающих символов, принимает необязательную переменную по ссылке для получения процентного показателя и чувствительна к регистру. Для смежных инструментов сравнения см. strcmp() для точного сравнения, levenshtein() для редакционного расстояния и soundex() для фонетического сопоставления.

Практика

Практика
Что делает функция similar_text() в PHP?
Что делает функция similar_text() в PHP?
Was this page helpful?