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 — Tri un tableau en conservant les clés, avec une collation
Description
Style orienté objet
&$arr
[, int $sort_flag
] )Style procédural
Cette fonction trie un tableau en maintenant l'association entre les clés et les valeurs. Elle sert surtout à trier des tableaux associatifs, où l'ordre des éléments est important. Les éléments seront triés en fonction des conventions locales.
Équivalent de la fonction PHP standard asort().
Liste de paramètres
-
coll -
Objet Collator.
-
arr -
tableau de chaînes à trier.
-
sort_flag -
Type de tri, optionnel, choisi parmi les constantes suivantes :
-
Collator::SORT_REGULAR: compare les éléments normalement (pas de changement de type). -
Collator::SORT_NUMERIC: compare les éléments numériquement. -
Collator::SORT_STRING: compare les éléments littéralement.
Collator::SORT_REGULAR. -
Valeurs de retour
Cette fonction retourne TRUE en cas de
succès ou FALSE si une erreur survient.
Exemples
Exemple #1 Exemple avec collator_asort()
<?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 );
?>
L'exemple ci-dessus va afficher :
array ( 'c' => '7', 'b' => '50', 'a' => '100', )array ( 'a' => '100', 'b' => '50', 'c' => '7', )
Voir aussi
- Constantes Collator
- collator_sort() - Tri un tableau avec une collation
- collator_sort_with_sort_keys() - Tri un tableau et ses clés avec une collation
