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
)
strcoll
(PHP 4 >= 4.0.5, PHP 5)
strcoll — Comparación de cadenas basada en la localidad
Descripción
int strcoll
( string
$str1
, string $str2
)Note que esta comparación es sensible a mayúsculas y minúsculas, y a diferencia de strcmp(), esta función no es segura con material binario.
strcoll() usa la localidad actual para realizar las comparaciones. Si la localidad actual es C o POSIX, esta función es equivalente a strcmp().
Parámetros
-
str1 -
La primera cadena.
-
str2 -
La segunda cadena.
Valores devueltos
Devuelve < 0 si str1 es menor que
str2; > 0 si
str1 es mayor que
str2, y 0 si son equivalentes.
Historial de cambios
| Versión | Descripción |
|---|---|
| 4.2.3 | Esta función trabaja ahora en win32. |
Ver también
- preg_match() - Realiza una comparación con una expresión regular
- strcmp() - Comparación de string segura a nivel binario
- strcasecmp() - Comparación de string segura a nivel binario e insensible a mayúsculas y minúsculas
- substr() - Devuelve parte de una cadena
- stristr() - strstr insensible a mayúsculas y minúsculas
- strncasecmp() - Comparación de los primeros n caracteres de cadenas, segura con material binario e insensible a mayúsculas y minúsculas
- strncmp() - Comparación segura a nivel binario de los primeros n caracteres entre strings
- strstr() - Encuentra la primera aparición de un string
- setlocale() - Establecer la información de la configuración regional
sakkarinlaohawisut15 at hotmail dot com ¶
10 years ago
Anonymous ¶
10 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!
