note 83117 deleted from function.array-multisort by cmb
| From: | cmb@php.net | Date: | Sun, 29 Sep 2019 07:43:06 +0000 |
| Subject: | note 83117 deleted from function.array-multisort by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-212414@lists.php.net to get a copy of this message | ||
Note Submitter: php {dot} net [arrt] sebble.com
----
I was requiring a PHP function a sort my array data as part of an SQL interpreter for PHP arrays.
This is the code I came up with. and works wonderfully.
I hope this helps somebody. If anyone uses this, let me know what you think, if there are any
problems with it...
<?
## ##
## PHPMultiSort ##
## ##
// Takes:
// $data, multidim array
// $keys, array(array(key=>col1, sort=>desc), array(key=>col2, type=>numeric))
function php_multisort($data,$keys){
// List As Columns
foreach ($data as $key => $row) {
foreach ($keys as $k){
$cols[$k['key']][$key] = $row[$k['key']];
}
}
// List original keys
$idkeys=array_keys($data);
// Sort Expression
$i=0;
foreach ($keys as $k){
if($i>0){$sort.=',';}
$sort.='$cols['.$k['key'].']';
if($k['sort']){$sort.=',SORT_'.strtoupper($k['sort']);}
if($k['type']){$sort.=',SORT_'.strtoupper($k['type']);}
$i++;
}
$sort.=',$idkeys';
// Sort Funct
$sort='array_multisort('.$sort.');';
eval($sort);
// Rebuild Full Array
foreach($idkeys as $idkey){
$result[$idkey]=$data[$idkey];
}
return $result;
}
###############
// Example Data
$_DATA['table1'][] = array("name" => "Sebastian", "age"
=> 18, "male" => true);
$_DATA['table1'][] = array("name" => "Lawrence", "age"
=> 16, "male" => true);
$_DATA['table1'][] = array("name" => "Olivia", "age"
=> 10, "male" => false);
$_DATA['table1'][] = array("name" => "Dad", "age"
=> 50, "male" => true);
$_DATA['table1'][] = array("name" => "Mum", "age"
=> 40, "male" => false);
$_DATA['table1'][] = array("name" => "Sebastian", "age"
=> 56, "male" => true);
$_DATA['table1'][] = array("name" => "Lawrence", "age"
=> 19, "male" => true);
$_DATA['table1'][] = array("name" => "Olivia", "age"
=> 24, "male" => false);
$_DATA['table1'][] = array("name" => "Dad", "age"
=> 10, "male" => true);
$_DATA['table1'][] = array("name" => "Mum", "age"
=> 70, "male" => false);
###############
$res=php_multisort($_DATA['table1'],
array(array('key'=>'name'),array('key'=>'age','sort'=>'desc')))
var_dump($res);
/*
array(10) {
[8]=>
array(3) {
["name"]=>
string(3) "Dad"
["age"]=>
int(10)
["male"]=>
bool(true)
}
[3]=>
array(3) {
["name"]=>
string(3) "Dad"
["age"]=>
int(50)
["male"]=>
bool(true)
}
[1]=>
array(3) {
["name"]=>
string(8) "Lawrence"
["age"]=>
int(16)
["male"]=>
bool(true)
}
[6]=>
array(3) {
["name"]=>
string(8...
*/
?>