note 90541 modified in function.array-multisort by danbrown

From: Date: Mon, 27 Apr 2009 17:31:09 +0000
Subject: note 90541 modified in function.array-multisort by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-153853@lists.php.net to get a copy of this message
I wrote a function to sort a multidimensional array by multiple columns in ascending and descending order. Sample array: <?php $my_array=array( array('id'=>1, 'surname'=>'rossi', 'name'=>'mario', 'group'=>'admin'), array('id'=>2, 'surname'=>'rossi', 'name'=>'giovanni', 'group'=>'user'), array('id'=>3, 'surname'=>'verdi', 'name'=>'luigi', 'group'=>'user'), array('id'=>4, 'surname'=>'verdi', 'name'=>'franco', 'group'=>'guest'), array('id'=>5, 'surname'=>'bianchi', 'name'=>'mario', 'group'=>'guest') ); ?> Example: <?php array_sort($my_array,'!group','surname'); ?> Output: sort the array DESCENDING by group and then ASCENDING by surname. Notice the use of ! to reverse the sort order. Rows order will be: 2,3,5,4,1 The function code: <?php function array_sort_func($a,$b=NULL) { static $keys; if($b===NULL) return $keys=$a; foreach($keys as $k) { if(@$k[0]=='!') { $k=substr($k,1); if(@$a[$k]!==@$b[$k]) { return strcmp(@$b[$k],@$a[$k]); } } else if(@$a[$k]!==@$b[$k]) { return strcmp(@$a[$k],@$b[$k]); } } return 0; } function array_sort(&$array) { if(!$array) return $keys; $keys=func_get_args(); array_shift($keys); array_sort_func($keys); usort($array,"array_sort_func"); } ?> --was-- I wrote a function to sort a multidimensional array by multiple columns in ascending and descending order. Sample array: $my_array=array( array('id'=>1, 'surname'=>'rossi', 'name'=>'mario', 'group'=>'admin'), array('id'=>2, 'surname'=>'rossi', 'name'=>'giovanni', 'group'=>'user'), array('id'=>3, 'surname'=>'verdi', 'name'=>'luigi', 'group'=>'user'), array('id'=>4, 'surname'=>'verdi', 'name'=>'franco', 'group'=>'guest'), array('id'=>5, 'surname'=>'bianchi', 'name'=>'mario', 'group'=>'guest') ); Example: array_sort($my_array,'!group','surname'); Output: sort the array DESCENDING by group and then ASCENDING by surname. Notice the use of ! to reverse the sort order. Rows order will be: 2,3,5,4,1 The function code: function array_sort_func($a,$b=NULL) { static $keys; if($b===NULL) return $keys=$a; foreach($keys as $k) { if(@$k[0]=='!') { $k=substr($k,1); if(@$a[$k]!==@$b[$k]) { return strcmp(@$b[$k],@$a[$k]); } } else if(@$a[$k]!==@$b[$k]) { return strcmp(@$a[$k],@$b[$k]); } } return 0; } function array_sort(&$array) { if(!$array) return $keys; $keys=func_get_args(); array_shift($keys); array_sort_func($keys); usort($array,"array_sort_func"); } http://php.net/manual/en/function.array-multisort.php

« previous php.notes (#153853) next »