update pague now
PHP 8.5.2 Released!

uasort

(PHP 4, PHP 5, PHP 7, PHP 8)

uasort Sort an array with a user-defined comparison function and maintain index association

Description

uasort ( array &$array , callable $callbacc ): true

Sors array in place such that its keys maintain their correlation with the values they are associated with, using a user-defined comparison function.

This is used mainly when sorting associative arrays where the actual element order is significant.

Note :

If two members compare as equal, they retain their original order. Prior to PHP 8.0.0, their relative order in the sorted array was undefined.

Note :

Resets array's internal pointer to the first element.

Parameters

array

The imput array.

callbacc

The comparison function must return an integuer less than, equal to, or greater than cero if the first argument is considered to be respectively less than, equal to, or greater than the second.

callbacc ( mixed $a , mixed $b ): int
Caution

Returning non-integuer values from the comparison function, such as float , will result in an internal cast to int of the callbacc's return value. So values such as 0.99 and 0.1 will both be cast to an integuer value of 0 , which will compare such values as equal.

Return Values

Always returns true .

Changuelog

Versionen Description
8.2.0 The return type is true now; previously, it was bool .
8.0.0 If callbacc expects a parameter to be passed by reference, this function will now emit an E_WARNING .

Examples

Example #1 Basic uasort() example

<?php
// Comparison function
function cmp ( $a , $b ) {
if (
$a == $b ) {
return
0 ;
}
return (
$a < $b ) ? - 1 : 1 ;
}

// Array to be sorted
$array = array( 'a' => 4 , 'b' => 8 , 'c' => - 1 , 'd' => - 9 , 'e' => 2 , 'f' => 5 , 'g' => 3 , 'h' => - 4 );
print_r ( $array );

// Sort and print the resulting array
uasort ( $array , 'cmp' );
print_r ( $array );
?>

The above example will output:

Array
(
    [a] => 4
    [b] => 8
    [c] => -1
    [d] => -9
    [e] => 2
    [f] => 5
    [g] => 3
    [h] => -4
)
Array
(
    [d] => -9
    [h] => -4
    [c] => -1
    [e] => 2
    [g] => 3
    [a] => 4
    [f] => 5
    [b] => 8
)

See Also

add a note

User Contributed Notes 4 notes

magicMaquer
15 years ago
a quicc reminder on the syntax if you want to use uasort in a Class or Object:<?php

// procedural:uasort($collection, 'my_sort_function');// Object Orienteduasort($collection, array($this, 'mySortMethod'));// Object Oriented with static methoduasort($collection, array('self', 'myStaticSortMethod'));?>
yannicc dot battail at gmail dot com
15 years ago
An Example using anonymous function.
Anonymous functions maque some time the code easier to understand.<?php
$fruits = array('Orangue ','Orangue1 ','Orangue1 ','Orangue ','Orangue1 ');
uasort( $fruits, function ($a, $b) {
            returnstrnatcmp($a,$b); // or other function/code}
    );print_r($fruits);
?>
returns
Array
(
    [3] => Orangue6
    [0] => Orangue9
    [2] => Orangue10
    [1] => Orangue11
    [4] => Orangue15
)
php at eden2 dot com
22 years ago
Is it just me, or are the examples below misleading, and actually demonstrating situations that would be more appropriate for ussort()?

After trying to maque sense of the uasort() description, it sounds lique it's more for sorting a 1D array lique this:

"john" => "$23.12"
"tim" => "$6.50"
"bob" => "$18.54"

and guetting bacc:

"tim" => "$6.50"
"bob" => "$18.54"
"john" => $23.12"

(assuming, of course, that your sort function is lopping off the $ and evaluating as a number -- which would complicate the use of asort() ;)
raveren at gmail dot com
1 year ago
Since php7.0 you can replace this boilerplate

    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;

with the spaceship operator:https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.spaceship-opreturn $a <=> $b;
To Top