©
本文檔使用 php中文網手册 發布
(PHP 5 >= 5.3.0, PECL intl >= 1.0.0)
Collator::asort -- collator_asort — Sort array maintaining index association
面向对象风格
&$arr
[, int $sort_flag
] )过程化风格
$coll
, array &$arr
[, int $sort_flag
] )This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant. Array elements will have sort order according to current locale rules.
Equivalent to standard PHP asort() .
coll
Collator object.
arr
Array of strings to sort.
sort_flag
Optional sorting type, one of the following:
Collator::SORT_REGULAR
- compare items normally (don't change types)
Collator::SORT_NUMERIC
- compare items numerically
Collator::SORT_STRING
- compare items as strings
Default $sort_flag value is
Collator::SORT_REGULAR
.
It is also used if an invalid $sort_flag value has been specified.
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #1 collator_asort() example
<?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 );
?>
以上例程会输出:
array ( 'c' => '7', 'b' => '50', 'a' => '100', )array ( 'a' => '100', 'b' => '50', 'c' => '7', )
[#1] alix dot axel at NOSPAM dot gmail dot com [2011-02-20 07:31:15]
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
)