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 — Yerele göre dizge karşılaÅŸtırma
Açıklama
int strcoll
( string
$d1
, string $d2
)strcmp() işlevinin tersine bu işlev ikil olarak güvenilir değildir ancak strcmp() gibi harf büyüklüğüne duyarlı karşılaştırma yapılır.
strcoll() işlevi karşılaştırma yaparken yereli kullanır. Eğer kullanıldığı yerel C veya POSIX ise bu işlev strcmp() işlevine eşdeğerdir.
DeÄŸiÅŸtirgeler
-
d1 -
İlk dizge.
-
d2 -
İkinci dizge.
Dönen Değerler
d1 dizgesi d2 dizgesinden
küçükse sıfırdan küçük bir değer; d1 dizgesi
d2 dizgesinden büyükse sıfırdan büyük bir değer;
d1 dizgesi ile d2 dizgesi
aynıysa sıfır döndürür.
Sürüm Bilgisi
| Sürüm: | Açıklama |
|---|---|
| 4.2.3 | Bu işlev artık win32'de çalışmıyor. |
Ayrıca Bakınız
- preg_match() - Bir düzenli ifadeyi eÅŸleÅŸtirmeye çalışır
- strcmp() - İkil olarak güvenilir dizge karşılaÅŸtırması yapar
- strcasecmp() - İkil olarak güvenilir ve harf büyüklüÄŸüne duyarsız dizge karşılaÅŸtırması yapar
- substr() - Dizgenin bir kısmını döndürür
- stristr() - Harf büyüklüÄŸüne duyarsız olarak ilk alt dizgeyi bulur
- strncasecmp() - İlk n karakteri ikil ve harf büyüklüÄŸüne duyarsız olarak karşılaÅŸtırır
- strncmp() - İlk n karakteri ikil olarak karşılaştırır
- strstr() - İlk alt dizgeyi bulur
- setlocale() - Yereli ayarlar
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!
