<?php

define
('SORT_REVERSE', -1000);

function 
order_by_sort(&$array$keys$orders) {
    if (
count($keys) == 0) {
        return ;
    }
    
$key array_shift($keys);
    
$order array_shift($orders);
    
$array4sort = array();
    foreach(
$array as $elem) {
        
$value $elem[$key];
        if (
array_key_exists($value$array4sort) == false) {
            
$array4sort[$value] = array();
        }
        
$array4sort[$value][] = $elem;
    }
    if (
is_null($order)) {
        
ksort($array4sort);
    } else {
        switch(
$order) {
        case 
SORT_REGULAR:
        case 
SORT_NUMERIC:
        case 
SORT_STRING:
        case 
SORT_LOCALE_STRING:
            
ksort($array4sort$order);
            break;
        default:
            
$order -= SORT_REVERSE;
            
krsort($array4sort$order);
            break;
        }
    }
    
$array = array();
    foreach (
$array4sort as $value => $v) {
        
order_by_sort($v$keys$orders);
        foreach (
$v as $e) {
            
$array[] = $e;
        }
    }
    return ;
}