Если все рассматриваемые переменные-члены гарантированно будут разными, будет проще и быстрее создать новую коллекцию, индексированную этими значениями, а затем ksort
it:
foreach($obj_list as $obj)
$map[$obj->some_var] = $obj;
ksort($map);
/// $map now contains the sorted list
Если есть повторяющиеся значения, вы все равно можете избежать usort
, используя менее известную особенность sort
, согласно которой массивы массивов сортируются по значению первого скалярного члена.
foreach($obj_list as $obj)
$map[] = array($obj->some_var, $obj);
sort($map); // sorts $map by the value of ->some_var
Я думаю, это все равно будет в 10000000 раз быстрее, чем usort