Функции Язык программирования PHP

strnatcmp

(PHP 4)

strnatcmp - сравнение строк с использованием алгоритма "natural order/натурального порядка".

Описание

int strnatcmp (string str1, string str2)

Эта функция реализует алгоритм сравнения, упорядочивающий алфавитно-числовые строки человекообразным способом. Вот пример разницы между этим алгоритмом и обычными алгоритмами сортировки строк на компьютере (используемые в strcmp()):
$arr1 = $arr2 = array("img12.png","img10.png","img2.png","img1.png"); echo 
"Standard string comparison\n"; usort($arr1,"strcmp"); print_r($arr1); echo "\nNatural 
order string comparison\n"; usort($arr2,"strnatcmp"); print_r($arr2);

Этот код даст на выводе:

Standard 
string comparison Array ( [0] => img1.png [1] => img10.png [2] => 
img12.png [3] => img2.png ) Natural order string comparison Array ( [0] => 
img1.png [1] => img2.png [2] => img10.png [3] => img12.png )

Дополнительно см. страницу Martin'а Pool'а Natural Order String Comparison.

Как и другие функции сравнения строк, эта возвращает < 0, если str1 меньше str2; > 0, если str1 больше str2; 0, если они равны.

Обратите внимание, что это сравнение с учётом регистра символов.

См. также ereg(), strcasecmp(), substr(), stristr(), strcmp(), strncmp(), strncasecmp(), strnatcasecmp(), strstr(), natsort() и natcasesort().


Назад Оглавление Вперёд
strnatcasecmp Вверх strncasecmp

Условные субпатэрны

Можно заставить субпатэрн в процессе совпадения подчиняться условно или выбирать из двух альтернативных субпатэрнов, в зависимости от результата утверждения или от того, совпал предшествующий захватывающий субпатэрн или нет. Вот две возможные формы условного субпатэрна:

(?(condition)yes-pattern)
(?(condition)yes-pattern|no-pattern)

Если условие выполнено, используется yes-pattern; иначе используется no-pattern (если имеется). Если в субпатэрне имеются более двух альтернатив, возникает ошибка компиляции.

Есть условия двух видов. Если текст между скобками состоит из последовательности цифр, то условие выполнено, если захватывающий субпатэрн этого числа ранее совпал. Рассмотрим следующий патэрн, который содержит незначащий пробел для удобства чтения (предположим наличие опции PCRE_EXTENDED) и для разделения патэрна на три части для облегчения обсуждения:

( \( )?[^()]+(?(1) \) )