Строковые функции в PHP. Сравнение строк в PHP | OTUS

Строковые функции в PHP. Сравнение строк в PHP

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

Итак, для сравнения можно использовать: — strcmp(); — strncmp(); — strcasecmp(); — strncasecmp(); — strnatcmp(); — strnatcasecmp(); — similar_text(); — levenshtein().

1. strcmp()

Синтаксис следующий:

int strcmp(string str1, string str2)

Данная функция сравнивает 2 строки в PHP и возвращает: — 1, когда строка str1 лексикографически больше, чем str2; — 0, когда строки полностью совпадают; — 1, когда строка str1 лексикографически меньше str2.

Функция чувствительна к регистру, поэтому регистр оказывает влияние на результат сравнений (сравнение выполняется побайтово).

Пример работы strcmp() в PHP:

<?
   $str1 = "ttt";
   $str2 = "tttttttttt";
   echo("Result of strcmp ($str1 , $str2) is ");
   echo(strcmp ($str1, $str2)); echo("<br>");
   echo("Result of strcmp ($str2, $str1)> is ");
   echo(strcmp ($str2, $str1)); echo("<br>");
   echo("Result of strcmp ($str1 , $str1) is ");
   echo(strcmp ($str1,$str1));
?>

А вот итог:

Result of strcmp (ttt , tttttttttt) is -1
Result of strcmp (tttttttttt, ttt) is 1
Result of strcmp (ttt, ttt) is 0

2. strncmp()

int strncmp(string str1, string str2, int len)

Данная функция отличается от strcmp() прежде всего тем, что сравнивает первые len байтов, т. е. начала строк. А когда len меньше длины наименьшей из строк, строки сравниваются целиком.

Что касается остального, то всё аналогично strcmp(), включая чувствительность к регистру.

3. strcasecmp()

int strcasecmp(string str1, string str2)

И эта функция сравнения работает так же, как и strcmp(). Разница лишь в том, что не учитывается регистр букв.

4. strncasecmp()

int strncasecmp(string str1, string str2, int len)

strncasecmp() сравнивает начала строк, не учитывая регистр.

5. strnatcmp()

int strnatcmp(string str1, string str2)

Выполняет «естественное» сравнение строк в PHP. Можно сказать, что функция имитирует сравнение строк человеком. Например, если мы будем сравнивать файлы pict20.gif, pict1.gif, pict2.gif, pict10.gif, то при обычной сортировке получим следующее расположение: pict1.gif, pict10.gif, pict2.gif, pict20.gif. А вот естественная сортировка с помощью strnatcmp() даст результат, который более привычен человеку: pict1.gif, pict2.gif, pict10.gif, pict20.gif.

Регистр учитывается.

<?
   $array1 = $array2 = array("pict10.gif", "pict2.gif", "pict20.gif", "pict1.gif");
   echo("стандартная сортировка:"); echo ("<br>");
   usort ($array1, strcmp);
   print_r ($array1);
   echo ("<br>"); echo("естественная сортировка:"); echo("<br>");
   usort ($array2, strnatcmp);
   print_r ($array2);
?>

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

стандартная сортировка:
Array([0]=>pict1.gif [1]=> pict10.gif [2]=>pict2.gif [3]pict20.gif)
естественная сортировка:
Array([0]=>pict1.gif [1]=> pict2.gif [2]=>pict10.gif [3]pict20.gif)

6. strnatcasecmp()

int strnatcasecmp(string str1, string str2)

Выполняет вышеупомянутое «естественное» сравнение строк, но уже не учитывая регистр.

7. similar_text()

int similar_text(string str_first, string str_second [, double percent])

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

Пример:

<?
   $str1 = "Hello, world!";
   $str2 = "Hello!";
   $var = similar_text($str1,$str2);
   $var1 = similar_text($str1, $str2, &$tmp);
   // параметр $tmp передаем по ссылке
   echo("Результат выполнения функции similar_text()
   для строк $str и $str1 в числе символов:");
   echo("<br>"); echo("$var"); echo("<br>");
   echo("и в процентах:"); echo("<br>");
   echo($tmp); // для вывода информации в % происходит обращение к $tmp
?>

Результат:

    Результат выполнения функции similar_text() для строк Hello, world! и Hello! в числе символов:
6
и в %:
63.157894736842

8. levenshtein()

Определяет различие Левенштейна при сравнении двух строк в PHP.

int levenshtein(string str1, string str2)
int levenshtein(string str1, string str2, int cost_ins, int cost_rep, int cost_del)
int levenshtein(string str1, string str2, function cost)

Различие Левенштейна — минимальное количество символов, которое нужно заменить, удалить или вставить, чтобы превратить строку str1 в str2.

Сложность алгоритма — O(m*n), поэтому функция levenshtein() в PHP работает быстрее, чем similar_text(). Обратите внимание, что у функции 3 вида синтаксиса.

Хотите знать больше? Записывайтесь на курс "Backend-разработчик на PHP"!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто