- Подробности
-
Категория: PHP. Строки
Синтаксис функции strcmp():
int strcmp(string str1, string str2)
Эта функция сравнивает две строки — str1 и str2 и возвращает:
0, если строки полностью совпадают
1, если строка str1 лексикографически больше строки str2
-1, если строка str1 лексикографически меньше строки str2
Лексикографический порядок последовательностей предполагает, что последовательность a!, предшествует последовательности b!,, если для некоторого s!, их начальные отрезки длины s!, равны, а (s+1)!,-ый член последовательности a!, меньше.
Примеры лексикографического порядка:
* последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999)
* порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это к примеру ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.
Википедия.
Листинг № 1 — Пример сравнения строк учитывая регистр букв, с помощью функции strcmp().
<?php
// Пример 1
$str1 = "www";
$str2 = "wwwwwww";
echo strcmp($str1, $str2); // выведет на монитор число -4
// Пример 2
$str1 = "wwwwwww";
$str2 = "www";
echo strcmp($str1, $str2); // выведет на монитор число 4
// Пример 3
$str1 = "www";
$str2 = "www";
echo strcmp($str1, $str2); // выведет на монитор число 0
// Пример 4
$str1 = "Www";
$str2 = "www";
echo strcmp($str1, $str2); // выведет на монитор число -1
// Пример 5
$str1 = "AWww";
$str2 = "www";
echo strcmp($str1, $str2); // выведет на монитор число -1
// Пример 6
$str1 = "www";
$str2 = "aaa";
echo strcmp($str1, $str2); // выведет на монитор число 1
?>
На основе этой функции создадим программу для сравнения текста. Принцип работы (алгоритм, последовательность) следующий. Есть некая форма для ввода текста оригинала и есть вторая форма, для сравнения с оригиналом. Содержимое этих форм отправляем для сравнения в функцию strcmp().
Листинг № 2 — Программа для сравнения строк, текста или каких либо символов на сходство или различие (идентичность).
<?php
$str1 = trim($_POST['form1']); // форма один
$str2 = trim($_POST['form2']); // форма два
// если переменная button содержит значение "Сравнить"…
if($_POST['button']=="Сравнить")
{
//Сравниваем значения двух переменных.
// Если функция возвращает ноль — текст идентичен и срабатывает второй
// блок конструкции if, в противном случаи первый блок.
// Первый блок срабатывает только в том случаи, если значение в
// скобках if(TRUE) — истинно, все значения кроме нуля истины(TRUE),
// а ноль есть FALSE. Функция возвращает ноль при полной идентичности строк.
if(strcmp($str1, $str2))
{
echo "Текст не идентичен. " . strcmp($str1, $str2);
}
else
{
echo "Текст идентичен. " . strcmp($str1, $str2);
}
}
// Вывод на монитор форм для заполнения текстом
echo "<form name='form1' method='post' action=''>
Форма1
<br>
<textarea name='form1' cols='45' rows='5'>$str1 </textarea>
<br>
<br>
Форма2
<br>
<textarea name='form2' cols='45' rows='5'>$str2 </textarea>
<br>
<br>
<input type='submit' name='button' id='button' value='Сравнить'>
</form>";
?>
Листинг № 3 — Использование функции strcasecmp().
<?php
$var1 = "Hello";
$var2 = "hello";
echo strcasecmp($var1, $var2); // 0
$var1 = "4545";
$var2 = "4546";
echo strcasecmp($var1, $var2); // -1
$var1 = "Hello";
$var2 = "Good";
echo strcasecmp($var1, $var2); // 1
?>
Функция strcasecmp сравнивает две строки не учитывая регистр букв.
Если значение переменной $var1 меньше значения переменной $var2, возвращается -1
Если значение переменной $var1 больше значения переменной $var2, возвращается 1
Если значения переменных $var1 и $var2 равны, возвращается 0