Strcmp: примеры (PHP)
strcmp(string string1, string string2): intФункция 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
Функция производит сравнение строк без учёта регистра. Её удобно использовать при проверке вводимых пользователем данных, где регистр не имеет значения.
Сравнивает первые 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 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
$fruits = ["Orange", "apple", "Banana", "grape"];
usort($fruits, 'strcmp');
print_r($fruits);
?>Array
(
[0] => Banana
[1] => Orange
[2] => apple
[3] => grape
)<?php
$result1 = strcmp("text\n", "text");
$result2 = strcmp("text ", "text");
$result3 = strcmp("text\t", "text");
echo "$result1, $result2, $result3";
?>1, 1, 1
<?php
$str1 = "café";
$str2 = "cafe\xCC\x81"; // Комбинированный символ
$result = strcmp($str1, $str2);
echo $result;
?>-121
<?php
function checkPassword($input, $stored) {
return strcmp($input, $stored) === 0;
}
$isCorrect = checkPassword("Secret123", "Secret123");
var_dump($isCorrect);
?>bool(true)
<?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
Функция strcmp() из стандартной библиотеки работает аналогично, но возвращает отрицательное, нулевое или положительное значение на основе кодов символов.