(PHP 4, PHP 5)
usort — 使用用户自定义的比较函数对数组中的值进行排序
本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。
Note: 如果两个成员比较结果相同,则它们在排序后的数组中的顺序未经定义。到 PHP 4.0.6 之前,用户自定义函数将保留这些单元的原有顺序。但是由于在 4.1.0 中引进了新的排序算法,结果将不是这样了,因为对此没有一个有效的解决方案。
Note: 本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
如果成功则返回 TRUE ,失败则返回 FALSE 。
Example#1 usort() 例子
<?php
function cmp ( $a , $b )
{
if ( $a == $b ) {
return 0 ;
}
return ( $a < $b ) ? - 1 : 1 ;
}
$a = array( 3 , 2 , 5 , 6 , 1 );
usort ( $a , "cmp" );
foreach ( $a as $key => $value ) {
echo "$key: $value\n" ;
}
?> 上例将输出:
0: 1 1: 2 2: 3 3: 5 4: 6
Note: 很明显在这个小例子中用 sort() 函数更合适。
Example#2 使用多维数组的 usort() 例子
<?php
function cmp ( $a , $b )
{
return strcmp ( $a [ "fruit" ], $b [ "fruit" ]);
}
$fruits [ 0 ][ "fruit" ] = "lemons" ;
$fruits [ 1 ][ "fruit" ] = "apples" ;
$fruits [ 2 ][ "fruit" ] = "grapes" ;
usort ( $fruits , "cmp" );
while (list( $key , $value ) = each ( $fruits )) {
echo "\$fruits[$key]: " . $value [ "fruit" ] . "\n" ;
}
?> 当排序多维数组时, $a 和 $b 包含到数组第一个索引的引用。
上例将输出:
$fruits[0]: apples $fruits[1]: grapes $fruits[2]: lemons
Example#3 使用对象的成员函数的 usort() 例子
<?php
class TestObj {
var $name ;
function TestObj ( $name )
{
$this -> name = $name ;
}
/* This is the static comparing function: */
function cmp_obj ( $a , $b )
{
$al = strtolower ( $a -> name );
$bl = strtolower ( $b -> name );
if ( $al == $bl ) {
return 0 ;
}
return ( $al > $bl ) ? + 1 : - 1 ;
}
}
$a [] = new TestObj ( "c" );
$a [] = new TestObj ( "b" );
$a [] = new TestObj ( "d" );
usort ( $a , array( "TestObj" , "cmp_obj" ));
foreach ( $a as $item ) {
echo $item -> name . "\n" ;
}
?> 上例将输出:
b c d
参见 uasort(), uksort(), sort(), asort(), arsort(), ksort(), natsort() 和 rsort()。
© 2005-2008 BlaBla.cn 版权所有