[Image] Четверг, 19.12.2024, 03:32 [Image]
SEO, технологии, игры, IT новости
[Image] Главная Регистрация Вход [Image]
[Image] Приветствую Вас, Гость · RSS [Image]
Меню сайта

Форма входа
 Блог
Главная » 2010 » Декабрь » 18 » Сравнение строк(мягкая мебель)
19:48
Сравнение строк(мягкая мебель)

Определение отношений между двумя строками не так очевидно, как те же операции с числами. Главная проблема заключается в контексте. Если вы сравниваете строки в двоичной форме, то два слова "Macro" и "macro" будут полностью различны, поскольку байтовое значение символа "М", как и должно быть, отличается от значения символа "т". Однако, в зависимости от ваших требований, "Macro" и "macro" могут быть эквивалентны и должны трактоваться именно так.
Наиболее простой способ сравнения двух строк предусматривает использование встроенных операций сравнения РНР. Однако есть несколько ловушек, о которых следует знать. Рассмотрим, например, следующее выражение:

echo (0 == 'ОМ;

Из-за того, что один из операндов является целым числом, строка ' 0' неявно также конвертируется в целое перед выполнением сравнения, приводя к результату, равному 1. Пока, на первый взгляд, это не кажется проблемой, но очень легко становится ею, когда встретится что-то вроде:

(О == 'Macro');

Так как строка 'Macro' конвертируется в целое значение 0 при вычислении выражения, результатом также будет true, что на выходе даст 1. Скорее всего, вы никогда не захотите, чтобы такое случилось в вашем коде, поэтому никогда не применяйте простые операции сравнения при работе со строками, если только точно не уверены в том, что делаете.
Вместо этого необходимо пользоваться операциями сравнения с контролем типов, которые могут проверить, что два сравниваемых операнда относятся к одному типу данных, прежде чем в действительности сравнивать их значения. Например, выражение:

(О === 'Macro');

вернет значение false, что, очевидно, и ожидалось получить. То же произойдет с выражением:

(О = = = ' О ' ) ;

Самый аккуратный способ сравнения двух строк, однако, обеспечивает функция

strcmpO:
int strcmp($vall, $val2);

Результат, возвращаемый strcmpO, зависит от алфавитного порядка двух строк.
Если $vall и $val2 идентичны, strcmpO вернет 0. Следует помнить, что функция strcmpO выполняет сравнение, чувствительное к регистру, поэтому, например, "Macro" и "macro" не будут идентичны.
Если два значения не эквивалентны, сравнение выполняется в соответствии с текущими локальными установками клиента — другими словами, использование алфавитных правил сортировки зависит от локальной среды, в которой выполняется сценарий. Если $vall по алфавиту предшествует $val2, результат будет отрицательным, в противном случае — положительным.
Например, при использовании локальных установок на компьютере автора (Canadian-English), получаются следующие результаты:

echo strcmp('Apple','Banana'); // возвращает < 0
echo strcmp('apple','Apple'); // возвращает > О
echo s t r c m p { ' 1 ' , ' t e s t ' ) ; // возвращает < О

Как видите, цифры имеют меньшее контекстное значение, чем буквы, а заглавные буквы — меньшее контекстное значение, чем прописные. В канадском английском региональном стандарте это также касается двоичных значений каждого символа, но это не всегда верно, в частности для тех языков, где комбинации символов рассматриваются как один символ (например, 'ае' в немецком, или 'cz' — в чешском).
Если вам нужно реализовать сравнение строк, не чувствительное к регистру, на этот случай РНР предлагает функцию strcasecmp (), которая принимает те же параметры, что и strcmp(): echo strcasecmp('Macro','macro'); // возвращает О


Категория: Все о PHP | Просмотров: 1449 | Добавил: witkom8382 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024
Категории
Оптимизация сайта [592]
Создание сайтов [355]
Заработать в интернете [508]
Технологии [48]
Полезное [392]
Услуги и сервисы [317]
Автоблог [105]
Скрипты для Ucoz [39]
Движок на сайт [10]
Все о Joomla и Drupal [20]
Все о PHP [91]
Поиск
Пользовательский поиск
Статистика


Онлайн всего: 3
Гостей: 3
Пользователей: 0
Seo сайт, технологии продвижения, мета теги, оптимизация сайтов, новости сео, Скрипты, Ucoz

Рейтинг@Mail.ru