usort

usort -- Ordena um array pelos valores utilizando uma função de comparação definida pelo usuário

Descrição

void usort ( array array, string cmp_function)

Essa função irá ordenar um array pelos valores usando uma função de classificação definida pelo usuário . Se o array precisar ser ordenado utilizando um critério não trivial , você deve usar essa função .

A função de comparação deve retornar um inteiro menor , igual ou maior que zero se o primeiro argumento for considerado respectivamente menor , igual , ou maior que o segundo .

Nota : Se dois elementos são considerados iguais , a ordem deles fica indefinida no array resultante . Até o PHP 4.0.6 as funções definidas pelo usuário manteriam a ordem original desses elementos , mas com o novo algoritmo de ordenação introduzido no 4.1.0 esse não é o caso , pois não existe solução para fazer isso de modo eficiente .



Exemplo 1 . Exemplo de usort( )





 
1

 
;

 
}

 
$a

 
=

 
array

 
(3

 
,

 
2

 
,

 
5

 
,

 
6

 
,

 
1)

 
;

 
usort

 
($a

 
,

 
"cmp")

 
;

 
while

 
(list

 
($chave

 
,

 
$valor

 
)

 
=

 
each

 
($a)

 
)

 
{

 
echo

 
"$chave

 
:

 
$valor\n"

 
;

 
}





Esse exemplo mostraria :


























Nota : Obviamente que nesse caso trivial a função rsort( ) seria mais apropriada .

Exemplo 2 . Exemplo de usort( ) usando um array multi-dimensional

 
function

 
cmp

 
(

 
$a

 
,

 
$b

 
)

 
{

 
return

 
strcmp($a["fruta"]

 
,

 
$b["fruta"])

 
;

 
}

 
$frutas[0]["fruta"

 
]

 
=

 
"limoes"

 
;

 
$frutas[1]["fruta"

 
]

 
=

 
"abacaxis"

 
;

 
$frutas[2]["fruta"

 
]

 
=

 
"goiabas"

 
;

 
usort($frutas

 
,

 
"cmp")

 
;

 
while

 
(list

 
($chave

 
,

 
$valor

 
)

 
=

 
each

 
($frutas)

 
)

 
{

 
echo

 
"\$frutas[$chave]

 
:

 
"

 
.

 
$valor["fruta"

 
]

 
.

 
"\n"

 
;

 
}





Na ordenação de um array multi-dimensional , $a e $b contêm referências para o primeiro índice do array .

Esse exemplo mostraria :

 
$fruits[

 
0]

 
:

 
abacaxis

 
$fruits[1]

 
:

 
goiabas

 
$fruits[2

 
]

 
:

 
limoes





Nota : Ao invés de um nome de função , um array contendo uma referência de objeto e ao nome de método também pode ser fornecidos .

Exemplo 3 . Exemplo de usort( ) usando uma função membro de um objeto

 
class

 
TestObj

 
{

 
var

 
$name

 
;

 
function

 
TestObj($name

 
)

 
    {

 
$this

 
-

 
name

 
=

 
$name

 
;

 
    }

 
/

 
*

 
Essa

 
é

 
a

 
função

 
estática

 
de

 
comparação

 
*

 
/

 
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")

 
;

 
uasort($a

 
,

 
array

 
("TestObj"

 
,

 
"cmp_obj"))

 
;

 
foreach

 
($a

 
as

 
$item

 
)

 
{

 
print

 
$item

 
-

 
name

 
."\n"

 
;

 
}





Esse exemplo mostraria :






Veja também uasort( ) , uksort( ) , sort( ) , asort( ) , arsort( ) , ksort( ) , natsort( ) , e rsort( ) .