function multisort($array, $criterias)
{
$sort_rule = '';
foreach($criterias as $criteria)
{
foreach($array as $row)
$sort_array[$criteria['col']][] = $row[$criteria['col']];
$sort_rule .= '$sort_array['.
(is_numeric($criteria['col']) ? $criteria['col'] : "'".$criteria['col']."'").
'], '.$criteria['dir'].',';
}
eval("array_multisort($sort_rule".' $array);');
return $array;
}
$to_sort = array(
array(
'column1' => 1,
'column2' => 4,
'column3' => 5,
2
),
array(
'column1' => 2,
'column2' => 4,
'column3' => 6,
7
),
array(
'column1' => 2,
'column2' => 3,
'column3' => 7,
17
),
array(
'column1' => 1,
'column2' => 3,
'column3' => 8,
12
)
);
$order = array(
array('col' => 'column1', 'dir' => SORT_ASC),
array('col' => 'column2', 'dir' => SORT_DESC),
array('col' => 0, 'dir' => SORT_ASC)
);
print_r($to_sort);
print_r(multisort($to_sort, $order));
i have a very very very large result from a database query so i don't want to select all the data everytime and do the sorting with ORDER BY
do you see something i could change/optimize (beside error handling in multisort() 😉?