note 71185 added to function.sort
| From: | eran dot liberty at gmail dot com | Date: | Wed, 15 Nov 2006 15:24:13 +0000 |
| Subject: | note 71185 added to function.sort | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-119750@lists.php.net to get a copy of this message | ||
/**
* Will sort an array by the value of the applied lambda function to each element
* without loosing the keys!
* @param unknown_type $arr
* @param unknown_type $func of the form mixvar func(your object)
*/
function sortByFunc(&$arr, $func) {
$tmpArr = array();
foreach ($arr as $k => &$e) {
$tmpArr[] = array('f' => $func($e), 'k' => $k, 'e'
=>&$e);
}
sort($tmpArr);
$arr = array();
foreach($tmpArr as &$fke) {
$arr[$fke['k']] = &$fke['e'];
}
}
example:
$arr = array(
1 => array('name' => 'eran', 'age' => 30),
2 => array('name' => 'naama', 'age' => 29),
3 => array('name' => 'a', 'age' => 11),
4 => array('name' => 'b', 'age' => 51),
5 => array('name' => 'z', 'age' => 5),
);
foreach($arr as $key => $val) {
echo "<br> $key => (" . $val['name'] . " ," .
$val['age'] . ")";
}
sortByFunc($arr,create_function('$element','return
$element["age"];'));
echo "<br> now sorted:";
foreach($arr as $key => $val) {
echo "<br> $key => (" . $val['name'] . " ," .
$val['age'] . ")";
}
output:
1 => (eran ,30)
2 => (naama ,29)
3 => (a ,11)
4 => (b ,51)
5 => (z ,5)
now sorted:
5 => (z ,5)
3 => (a ,11)
2 => (naama ,29)
1 => (eran ,30)
4 => (b ,51)
----
Server IP: 192.117.122.43
Probable Submitter: 85.64.251.8
----
Manual Page -- http://www.php.net/manual/en/function.sort.php
Edit -- https://master.php.net/note/edit/71185
Del: integrated -- https://master.php.net/note/delete/71185/integrated
Del: useless -- https://master.php.net/note/delete/71185/useless
Del: bad code -- https://master.php.net/note/delete/71185/bad+code
Del: spam -- https://master.php.net/note/delete/71185/spam
Del: non-english -- https://master.php.net/note/delete/71185/non-english
Del: in docs -- https://master.php.net/note/delete/71185/in+docs
Del: other reasons-- https://master.php.net/note/delete/71185
Reject -- https://master.php.net/note/reject/71185
Search -- https://master.php.net/manage/user-notes.php