1

Strcmp: примеры (PHP)

Сравнение строк функцией strcmp в языке PHP
Раздел: Работа со строками
strcmp(string string1, string string2): int
Основные характеристики strcmp

Функция strcmp выполняет бинарно-безопасное сравнение строк с учётом регистра в языке PHP. Её применяют для точного сопоставления строковых данных, когда необходимо определить их лексикографическое соотношение.

Функция задействуется в ситуациях, требующих проверки идентичности строк или определения их порядка при сортировке. Она часто встречается в алгоритмах валидации, системах авторизации и операциях упорядочивания данных.

Аргументы функции

Функция принимает два обязательных параметра:

  • string1 — первая сравниваемая строка.
  • string2 — вторая сравниваемая строка.

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

Базовые примеры применения
Сравнение одинаковых строк
<?php
$result = strcmp("Hello", "Hello");
echo $result; // 0
?>
0
Сравнение разных строк
<?php
$result = strcmp("Apple", "Banana");
echo $result; // Отрицательное число
?>
-1
Регистрозависимое сравнение
<?php
$result = strcmp("hello", "HELLO");
echo $result; // Положительное число
?>
32
Сравнение строк с числами
<?php
$result = strcmp("10", 10);
echo $result; // 0
?>
0
Похожие функции в PHP

Функция производит сравнение строк без учёта регистра. Её удобно использовать при проверке вводимых пользователем данных, где регистр не имеет значения.

Сравнивает первые n символов двух строк. Применяют, когда необходимо сопоставить только определённые начальные части строк.

Выполняет «естественное» сравнение, учитывающее числа внутри строк. Подходит для сортировки строк, содержащих числовые значения.

Операторы сравнения

Операторы ==, ===, <, > также могут сравнивать строки, но strcmp даёт более детальный результат (разницу символов), что полезно в алгоритмах сортировки.

Распространённые ошибки
Ожидание булева значения

Новички иногда ожидают true/false, но функция возвращает целое число.

<?php
if (strcmp("abc", "abc")) {
    echo "Строки равны";
} else {
    echo "Строки не равны"; // Этот блок будет выполнен
}
?>
Строки не равны
Нестрогое сравнение результата

Использование оператора == для проверки результата может привести к неожиданностям из-за приведения типов.

<?php
$result = strcmp("123", "123abc");
if ($result == false) {
    echo "Неверное срабатывание";
}
?>
Неверное срабатывание
Сравнение разных типов данных

При сравнении массива и строки в PHP 8+ возникает TypeError, в отличие от более ранних версий.

Изменения в новых версиях PHP
PHP 8.0

В PHP 8.0 ужесточили типизацию. Передача в strcmp параметров нескалярных типов (кроме строк) вызывает TypeError. Ранее такие параметры преобразовывались в строку "Array" или "Object".

<?php
// PHP 7
$result = strcmp([1,2], "Array");
echo $result; // 0

// PHP 8
$result = strcmp([1,2], "Array"); // TypeError
?>
TypeError: strcmp(): Argument #1 must be of type string, array given
Расширенные примеры использования
Использование в пользовательской сортировке
Пример php
<?php
$fruits = ["Orange", "apple", "Banana", "grape"];
usort($fruits, 'strcmp');
print_r($fruits);
?>
Array
(
    [0] => Banana
    [1] => Orange
    [2] => apple
    [3] => grape
)
Сравнение строк с пробелами и специальными символами
Пример php
<?php
$result1 = strcmp("text\n", "text");
$result2 = strcmp("text ", "text");
$result3 = strcmp("text\t", "text");
echo "$result1, $result2, $result3";
?>
1, 1, 1
Бинарное сравнение строк с разной кодировкой
Пример php
<?php
$str1 = "café";
$str2 = "cafe\xCC\x81"; // Комбинированный символ
$result = strcmp($str1, $str2);
echo $result;
?>
-121
Проверка ввода с учётом регистра
Пример php
<?php
function checkPassword($input, $stored) {
    return strcmp($input, $stored) === 0;
}
$isCorrect = checkPassword("Secret123", "Secret123");
var_dump($isCorrect);
?>
bool(true)
Сравнение строк, содержащих числа
Пример php
<?php
$result1 = strcmp("10 apples", "2 apples"); // Лексикографическое сравнение
$result2 = strcmp("image10.png", "image2.png");
echo "$result1, $result2";
?>
-1, -1
Аналоги в других языках

Strcmp в Python

Прямого аналога нет. Используют операторы сравнения или функцию cmp() в Python 2. В Python 3 сравнение строк операторами возвращает булево значение.

# Python 3
result = ('apple' > 'banana')  # False
print(result)
False

Strcmp в Javascript

Метод localeCompare() возвращает число, указывающее, идёт ли строка до, после или равна другой строке.

// JavaScript
let result = 'apple'.localeCompare('banana');
console.log(result); // -1
-1

Strcmp в MySQL

Оператор сравнения строк STRcmp работает аналогично, возвращая -1, 0 или 1.

-- MySQL
SELECT STRCMP('text1', 'text2');
-1
C/C++

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

PHP strcmp function comments

En
Strcmp Binary safe string comparison