note 116439 added to function.array-multisort

From: 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

« previous php.notes (#201348) next »