note 116439 added to function.array-multisort
| From: | ejennings_98 at yahoo dot com | Date: | Fri, 02 Jan 2015 21:43:43 +0000 |
| Subject: | note 116439 added to function.array-multisort | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-201348@lists.php.net to get a copy of this message | ||
Here is a much simpler way to sort a multi dimensional array and supports multiple columns sort,
along with any form of sort order you wish.
In this example the 2D array is sorted by Name ascending, Salary descending, and age ascending.
<?php
// Setup the dummy 2D array with 3 columns: Name, Salary, and Age
$SortArray = array();
$SortArray[] = array( 'Name' => 'Jim', 'Salary' => 100000,
'Age' => 50 );
$SortArray[] = array( 'Name' => 'Sally', 'Salary' => 120000,
'Age' => 40 );
$SortArray[] = array( 'Name' => 'Frank', 'Salary' => 103000,
'Age' => 30 );
$SortArray[] = array( 'Name' => 'Jane', 'Salary' => 100000,
'Age' => 30 );
$SortArray[] = array( 'Name' => 'Jim', 'Salary' => 100000,
'Age' => 20 );
$SortArray[] = array( 'Name' => 'Amy', 'Salary' => 101000,
'Age' => 40 );
$SortArray[] = array( 'Name' => 'Zale', 'Salary' => 120000,
'Age' => 40 );
$SortArray[] = array( 'Name' => 'Sam', 'Salary' => 103000,
'Age' => 30 );
$SortArray[] = array( 'Name' => 'Bettie', 'Salary' => 100000,
'Age' => 30 );
$SortArray[] = array( 'Name' => 'Carl', 'Salary' => 105000,
'Age' => 20 );
$SortArray[] = array( 'Name' => 'Erin', 'Salary' => 101000,
'Age' => 40 );
// Sort the array: Name Ascending, Salary Descending, Age Ascending
usort( $SortArray, function($a, $b) {
$nReturn = 0;
$nReturn = strnatcmp($a['Name'], $b['Name']) * 100;
$nReturn += ( $a['Salary'] < $b['Salary'] ) * 10;
$nReturn += ( $a['Age'] > $b['Age'] ) * 1;
return $nReturn;
});
var_dump( $SortArray );
?>
----
Server IP: 72.52.91.14
Probable Submitter: 96.48.122.184
----
Manual Page -- http://php.net/manual/en/function.array-multisort.php
Edit -- https://master.php.net/note/edit/116439
Del: integrated -- https://master.php.net/note/delete/116439/integrated
Del: useless -- https://master.php.net/note/delete/116439/useless
Del: bad code -- https://master.php.net/note/delete/116439/bad+code
Del: spam -- https://master.php.net/note/delete/116439/spam
Del: non-english -- https://master.php.net/note/delete/116439/non-english
Del: in docs -- https://master.php.net/note/delete/116439/in+docs
Del: other reasons-- https://master.php.net/note/delete/116439
Reject -- https://master.php.net/note/reject/116439
Search -- https://master.php.net/manage/user-notes.php