SunshinePHP Developer Conference 2015

strcoll

(PHP 4 >= 4.0.5, PHP 5)

strcollСравнение строк с учетом текущей локали

Описание

int strcoll ( string $str1 , string $str2 )

Обратите внимание, что эта функция учитывает регистр символов, и, в отличие от strcmp() не безопасна для обработки данных в двоичной форме.

strcoll() при сравнении использует установки текущей локали. Если установлена локаль C или POSIX, эта функция аналогична strcmp().

Список параметров

str1

Первая строка.

str2

Вторая строка.

Возвращаемые значения

Возвращает отрицательное число, если str1 меньше, чем str2, положительное число, если str1 больше, чем str2, и 0, если они равны.

Список изменений

Версия Описание
4.2.3 Теперь эта функция работает и на win32.

Смотрите также

  • preg_match() - Выполняет проверку на соответствие регулярному выражению
  • strcmp() - Бинарно-безопасное сравнение строк
  • strcasecmp() - Бинарно-безопасное сравнение строк без учета регистра
  • substr() - Возвращает подстроку
  • stristr() - Регистро-независимый вариант функции strstr
  • strncasecmp() - Бинарно-безопасное сравнение первых n символов строк без учета регистра
  • strncmp() - Бинарно-безопасное сравнение первых n символов строк
  • strstr() - Находит первое вхождение подстроки
  • setlocale() - Устанавливает настройки локали

add a note add a note

User Contributed Notes 2 notes

up
1
Anonymous
12 years ago
Note that some platforms implement strcmp() and strcasecmp() according to the current locale when strings are not binary equal, so that strcmp() and strcoll() will return the same value! This depends on how the PHP strcmp() function is compiled (i.e. if it uses the platform specific strcmp() found in its standard library!).
In that case, the only difference between strcoll() and strcmp() is that strcoll() may return 0 for distinct strings(i.e. consider strings are equal) while strcmp() will differentiate them if they have distinct binary encoding! This typically occurs on Asian systems.
What you can be sure is that strcmp() will always differentiate strings that are encoded differently, but the relative order may still use the current locale setting for collation order!
up
0
sakkarinlaohawisut15 at hotmail dot com
11 years ago
strcoll()'s behavior is sometimes a little bit confusing. It depends on LC_COLLATE in your locale.

<?php

$a
= 'a';
$b = 'A';

print
strcmp ($a, $b) . "\n"; // prints 1

setlocale (LC_COLLATE, 'C');
print
"C: " . strcoll ($a, $b) . "\n"; // prints 1

setlocale (LC_COLLATE, 'de_DE');
print
"de_DE: " . strcoll ($a, $b) . "\n"; // prints -2

setlocale (LC_COLLATE, 'de_CH');
print
"de_CH: " . strcoll ($a, $b) . "\n"; // prints -2

setlocale (LC_COLLATE, 'en_US');
print
"en_US: " . strcoll ($a, $b) . "\n"; // prints -2

?>

This is useful e. g. if want to sort an array by using strcoll:

<?php

$a
= array ('a', 'A', '', '', 'b', 'B');

setlocale (LC_COLLATE, 'C');
usort ($a, 'strcoll');
print_r ($a);

?>

This is like sort($a):
Array
(
    [0] => A
    [1] => B
  [2] => a
    [3] => b
    [4] =>
    [5] =>
)

<?php

setlocale
(LC_COLLATE, 'de_DE');
usort ($a, 'strcoll');
print_r ($a)

?>

This is completely different:
Array
(
    [0] => a
    [1] => A
    [2] =>
    [3] =>
    [4] => b
  [5] => B
)
To Top