For those of you who are looking for a way to integrate natural sorting with the UCA rules this hack seems to work:
<?php
$array = array
(
'1', '100',
'al', 'be',
'Alpha', 'Beta',
'Álpha', 'Àlpha', 'Älpha',
'かたかな',
'img1.png', 'img2.png',
'img10.png', 'img20.png'
);
echo '<pre>';
print_r(sortIntl($array, true));
echo '</pre>';
function sortIntl($array, $natural = true)
{
$data = $array;
if ($natural === true)
{
$data = preg_replace_callback('~([0-9]+)~', 'natsortIntl', $data);
}
collator_asort(collator_create('root'), $data);
return array_intersect_key($array, $data);
}
function natsortIntl($number)
{
return sprintf('%032d', $number);
}
?>
Output:
Array
(
[0] => 1
[1] => 100
[2] => al
[3] => be
[4] => Alpha
[5] => Beta
[6] => Álpha
[7] => Àlpha
[8] => Älpha
[9] => かたかな
[10] => img1.png
[11] => img2.png
[12] => img10.png
[13] => img20.png
)
Collator::asort
collator_asort
(PHP 5 >= 5.3.0, PECL intl >= 1.0.0)
Collator::asort -- collator_asort — Diziyi indislerin arasındaki ilişkilere göre sıralar
Açıklama
Nesne yönelimli kullanım
&$dizi
[, int $sıralama_türü
] )Yordamsal kullanım
Bir diziyi indislerinin arasındaki ilişkilere uygun olarak sıralar. Elemanlarının sıralamasının önem kazandığı yerlerde ilişkisel dizilerin içeriğini sıraya sokmakta kullanılır. Dizi elemanları yerele özgü kurallara göre sıralanır.
PHP'nin standart asort() işlevinin eşdeğeridir.
Değiştirgeler
-
karşılaştırıcı -
Collator nesnesi.
-
dizi -
Sıralanacak dizgeleri içeren dizi.
-
sıralama_türü -
İsteğe bağlı sıralama türü şunlardan biri olabilir:
-
Collator::SORT_REGULAR- öğeleri normal olarak karşılaştırır (tür değişmez). -
Collator::SORT_NUMERIC- öğeler sayısal olarak sıralanır. -
Collator::SORT_STRING- öğeler dizge olarak karşılaştırılır.
Öntanımlı değer
Collator::SORT_REGULARolup geçersiz sıralama türü belirtildiğinde de geçerli olur. -
Dönen Değerler
Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.
Örnekler
Örnek 1 - collator_asort() örneği
<?php
$coll = collator_create( 'en_US' );
$arr = array(
'a' => '100',
'b' => '50',
'c' => '7'
);
collator_asort( $coll, $arr, Collator::SORT_NUMERIC );
var_export( $arr );
collator_asort( $coll, $arr, Collator::SORT_STRING );
var_export( $arr );
?>
Yukarıdaki örneğin çıktısı:
array ( 'c' => '7', 'b' => '50', 'a' => '100', )array ( 'a' => '100', 'b' => '50', 'c' => '7', )
Ayrıca Bakınız
- Collator sabitleri
- collator_sort() - Belirtilen karşılaştırıcıyı kullanarak diziyi sıralar
- collator_sort_with_sort_keys() - Bir diziyi belirtilen karşılaştırıcıyı ve sıralama anahtarlarını kullanarak sıralar
