Вы хотите продолжать использовать мультисортировку.
Я сделал быстрый тест usort и array_multisort. Даже при подсчете только 10 мультисортов построение индекса происходит быстрее, чем usort. На 100 элементах это примерно в 5 раз быстрее. Приблизительно в 1000 элементах улучшения улучшаются прямо на порядок быстрее. Вызовы пользовательских функций слишком медленные. Я бегу 5.2.6
$count = 100;
for ($i = 0; $i < $count; $i++)
{
$temp = array('x' => rand(), 'y' => rand());
$data[] = $temp;
$data2[] = $temp;
}
function sortByX($a, $b) { return ($a['x'] > $b['x']); }
$start = microtime(true);
usort($data, "sortByX");
echo (microtime(true) - $start) * 1000000, "<br/>\n";
$start = microtime(true);
foreach ($data2 as $temp)
$s[] = $temp['x'];
array_multisort($s, SORT_NUMERIC, $data2);
echo (microtime(true) - $start) * 1000000, "<br/>\n";
В настоящее время PHP не имеет функции array_pluck, такой как ruby. После этого вы можете заменить этот код
foreach ($data2 as $temp)
$s[] = $temp['x'];`
с
$s = array_pluck('x', $data2);