Winer
Мимо проходил
usort vs array_multisort
возникла проблема сортировки массива вида - array[key](i=1..n, key-ключи) - по произвольному ключу.
Т.е. например массив
примет вид:
;
"придумал" два способа
1. просто использовать свою функцию сортировки в usort()
2.поставить первым ключ по которому сортирую(т.к. array_multisort сортирует только по первому ключу), отсортировать array_multisort и вернуть ключи как были, т.е. имеем два пробегания по массиву+сортировка.
на тесте(массив в 1000 элементов (элемент - array('key1'=>mt_rand(),'key2'=>...))
первый способо оказался медленне - в среднем 0,17 секунд против 0,148 у второго.
Может ли быть такое, мне казалось второй способ медленне будет. И можно ли как-то улучшить второй способ???
А может есть ещё более быстрые способы ???
возникла проблема сортировки массива вида - array[key](i=1..n, key-ключи) - по произвольному ключу.
Т.е. например массив
PHP:
$arr[0]['key1']=1;
$arr[0]['key2']=5;
$arr[1]['key1']=3;
$arr[1]['key2']=3;
$arr[2]['key1']=2;
$arr[2]['key2']=8;
PHP:
$arr[0]['key1']=1;
$arr[0]['key2']=5;
$arr[1]['key1']=2;
$arr[1]['key2']=8;
$arr[2]['key1']=3;
$arr[2]['key2']=3;
"придумал" два способа
1. просто использовать свою функцию сортировки в usort()
PHP:
function mysort($a,$b)
{
GLOBAL $sortby;
return strnatcmp($a[$sortby],$b[$sortby]);
};
$sortby='key1';
usort($arr,'mysort');
PHP:
$sortby=array('key2','key1');
$sortc=count($sortby);
for($i=0;$i<$test_count;$i++)
{
for($j=0,$tmparr=array();$j<$sortc;$j++)
{
$tmparr[$sortby[$j]]=$test_arr[$i][$sortby[$j]];
};
$test_arr[$i]=$tmparr;
};
array_multisort($test_arr);
$sortby=array('key1','key2');
for($i=0;$i<$test_count;$i++)
{
for($j=0,$tmparr=array();$j<$sortc;$j++)
{
$tmparr[$sortby[$j]]=$test_arr[$i][$sortby[$j]];
};
$test_arr[$i]=$tmparr;
};
первый способо оказался медленне - в среднем 0,17 секунд против 0,148 у второго.
Может ли быть такое, мне казалось второй способ медленне будет. И можно ли как-то улучшить второй способ???
А может есть ещё более быстрые способы ???