note 116439 deleted from function.array-multisort by salathe

From: 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 ); ?>

« previous php.notes (#201352) next »