Сортировка одного массива по значениям другого

Max_kmv

Новичок
Сортировка одного массива по значениям другого

Здравствуйте!

есть вот такая ситуация - массив $data с данными и массив $a2sort содержащий ключи некоторых объектов из $data. Так вот, надо отсортировать $a2sort в соответствии со значениями ключей priority соответствующего элемента в $data.
Вот код
PHP:
<?php
$data = array( 
0 => array("id" => 0,
"priority" => 20),
1 => array("id" => 1,
"priority" => 10),
3 => array("id" => 3,
"priority" => 5),
							);

$a2sort = array(0, 3);

function sort_by_priority_arr($a, $b){
	IF ($a["priority"] == $b["priority"])
	  return 0;
	ELSE
		return ($a["priority"] > $b["priority"]) ? +1 : -1;
}

uasort($a2sort, "sort_by_priority_arr");

?>
На выходе необходимо получить $a2sort = array(3,0)

Как вариант было сделать так
PHP:
FOREACH($a2sort as $val){
  $tmparray[$val] = &$data[$val];
}
uasort($tmparray, "sort_by_priority_arr");
Вопрос в том можно ли сделать более оптимально, избежав прохода по $a2sort и соответственно создания $tmparray ?
 

SiMM

Новичок
А чем [m]uasort[/m] не устроил?
И временный массив там в общем-то не нужен.
 

SiMM

Новичок
> а в "callback cmp_function" делать GLOBAL $data ?
В класс заверните :)
 

Max_kmv

Новичок
эх, не то...
хотелось бы, что бы бац - и все работает :)
но насколько я понимаю без фишек а-ля "в класс завернуть" тут никак. Думал, может есть тут хитрость какая житейская, что бы с помощью простого топора... %)
 

SiMM

Новичок
> но насколько я понимаю без фишек а-ля "в класс завернуть" тут никак.
Есть ещё фишки а-ля "реализовать алгоритм сортировки рученьками" ;)

-~{}~ 12.11.05 11:38:

Хотя есть один изощрённый вариантец :)
PHP:
function mysort($a,$b = NULL){
  static $data;
  if ($b === NULL) $data = $a;
  else return $data[$a]['priority'] > $data[$b]['priority'] ? 1 : -1;
}
mysort($data);
uasort($a2sort,'mysort');
print_r($a2sort);
 
Сверху