Строковые функции в PHP. Сравнение строк в PHP | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
iOS Developer. Professional Kotlin Backend Developer Flutter Mobile Developer Symfony Framework C++ Developer. Basic Unity Game Developer. Basic Java Developer. Professional
-35%
Highload Architect Unity Game Developer. Professional React.js Developer Специализация Java-разработчик
-25%
Алгоритмы и структуры данных
-16%
Scala-разработчик C# Developer. Professional
-23%
Разработчик голосовых ассистентов и чат-ботов Team Lead Архитектура и шаблоны проектирования NoSQL Web-разработчик на Python Golang Developer. Professional PostgreSQL Vue.js разработчик Супер-практикум по использованию и настройке GIT Разработчик IoT Подготовка к сертификации Oracle Java Programmer (OCAJP) Программист С HTML/CSS
Инфраструктура
Инфраструктурная платформа на основе Kubernetes Microservice Architecture Базы данных Highload Architect Reverse-Engineering. Professional
-8%
Network engineer. Basic Administrator Linux.Basic MongoDB Infrastructure as a code MS SQL Server Developer Cloud Solution Architecture Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по использованию и настройке GIT Разработчик IoT Экcпресс-курс «ELK» Супер-интенсив "Tarantool" Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Экспресс-курс «Введение в непрерывную поставку на базе Docker»
Корпоративные курсы
Безопасность веб-приложений Экосистема Hadoop, Spark, Hive Пентест. Практика тестирования на проникновение Node.js Developer Java QA Engineer. Basic
-18%
Reverse-Engineering. Professional
-8%
DevOps практики и инструменты NoSQL Reverse-Engineering. Basic Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Game QA Engineer Супер - интенсив по Kubernetes Дизайн сетей ЦОД Экспресс-курс «IaC Ansible» Экспресс-курс по управлению миграциями (DBVC) Экспресс-курс "Версионирование и командная работа с помощью Git" Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Строковые функции в 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 комментариев
Для комментирования необходимо авторизоваться