note 22849 added to function.usort
| From: | alex at netflex dot nl | Date: | Tue, 02 Jul 2002 08:10:26 +0000 |
| Subject: | note 22849 added to function.usort | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-32493@lists.php.net to get a copy of this message | ||
This function will sort on more then one values, test and have fun
<pre>
<?php
$array[0]['name'] = "a";
$array[0]['id'] = 3;
$array[1]['name'] = "a";
$array[1]['id'] = 2;
$array[2]['name'] = "a";
$array[2]['id'] = 5;
$array[3]['name'] = "b";
$array[3]['id'] = 8;
$array[4]['name'] = "b";
$array[4]['id'] = 1;
$array[5]['name'] = "b";
$array[5]['id'] = 0;
$array[6]['name'] = "c";
$array[6]['id'] = 5;
$array[7]['name'] = "c";
$array[7]['id'] = 7;
$array[8]['name'] = "c";
$array[8]['id'] = 3;
print_r($array);
$sort_array[0]['name'] = "name";
$sort_array[0]['sort'] = "ASC";
$sort_array[0]['case'] = TRUE;
$sort_array[1]['name'] = "id";
$sort_array[1]['case'] = FALSE;
sortx($array, $sort_array);
print_r($array);
function sortx(&$array, $sort = array()) {
$function = '';
while (list($key) = each($sort)) {
if (isset($sort[$key]['case'])&&($sort[$key]['case'] == TRUE)) {
$function .= 'if (strtolower($a["' . $sort[$key]['name'] .
'"])<>strtolower($b["' . $sort[$key]['name'] . '"])) {
return (strtolower($a["' . $sort[$key]['name'] . '"]) ';
} else {
$function .= 'if ($a["' . $sort[$key]['name'] .
'"]<>$b["' . $sort[$key]['name'] . '"]) { return
($a["' . $sort[$key]['name'] . '"] ';
}
if (isset($sort[$key]['sort'])&&($sort[$key]['sort'] ==
"DESC")) {
$function .= '<';
} else {
$function .= '>';
}
if (isset($sort[$key]['case'])&&($sort[$key]['case'] == TRUE)) {
$function .= ' strtolower($b["' . $sort[$key]['name'] .
'"])) ? 1 : -1; } else';
} else {
$function .= ' $b["' . $sort[$key]['name'] . '"]) ? 1 :
-1; } else';
}
}
$function .= ' { return 0; }';
usort($array, create_function('$a, $b', $function));
}
?>
</pre>
--
http://www.php.net/manual/en/function.usort.php
http://master.php.net/manage/user-notes.php?action=edit+22849
http://master.php.net/manage/user-notes.php?action=delete+22849
http://master.php.net/manage/user-notes.php?action=reject+22849