BlaBla.cn

PHP: usort - Manual

BlaBla.cn
Aspell > <Arrays
Last updated: Wed, 19 Mar 2008

usort

(PHP 4, PHP 5)

usort — 使用用户自定义的比较函数对数组中的值进行排序

说明

bool usort ( array &$array , callback $cmp_function )

本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。

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 ;
}

$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 ;
    }
}

$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()



Aspell > <Arrays
Last updated: Wed, 19 Mar 2008
 

 
BlaBla.cn

© 2005-2008 BlaBla.cn 版权所有