note 116439 deleted from function.array-multisort by salathe
| From: | salathe@php.net | Date: | Sat, 03 Jan 2015 14:42:12 +0000 |
| Subject: | note 116439 deleted from function.array-multisort by salathe | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-201352@lists.php.net to get a copy of this message | ||
Note Submitter: ejennings_98 at yahoo dot com
----
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 );
?>