I have looked at the php documentation, tutorials online and none of them how usort is actually working. I have an example i was playing with below.
$data =
This is another solution I found
<?php
$users = array( array( "peter", "male", "46"),
array( "hans", "male", "19"),
array( "john", "male", "30"),
array( "linda", "female", "54"),
array( "erika", "female", "79"));
usort($users, "whatevername");
function whatevername($whatever1, $whatever2)
{
// $whatever1 and $whatever2 are items from the $user array.
// index [2] is the age.
// Check if $whatever1 is older than $whatever2.
// Return 1 tells usort to swap the positions.
return $whatever1[2] > $whatever2[2];
}
echo("<pre>");
print_r($users);
echo("</pre>");
?>
As the others mentioned, usort uses the Quicksort algorithm. On a side note, you do not need to explicitly do the comparision between two strings. You can use PHP's string compare methods.
The function that you created,
function cmp($a, $b)
{
if ($a["month"] == $b["month"])
{
return 0;
}
return ($a["month"] < $b["month"]) ? -1 : 1;
}
could simply be written as follows
function compareMyStrings($a, $b){
return strnatcmp($a["month"], $b["month"]);
}
Hope this helps!
The callback provided to the sorting functions in PHP have three return values:
0: both elements are the same
-1 (<0): the first element is smaller than the second
1 (>0): the first element is greater
Now, usort
probably uses some kind of quicksort or mergesort internally. For each comparison it calls your callback with two elements and then decides if it needs to swap them or not.
The function cmp
itself doesn't do the sorting. It just tells usort
if a value is smaller, equal or greater than another value. E.g. if $a = 5
and $b = 9
it will return 1 to indicate that the value in $b
is greater than the one in $a
.
Sorting is done by usort
.
usort() uses an implementation of Quicksort to sort the array, it calls your cmp
function as many times as it needs to to fully sort the array using that algorithm.