Если вы хотите передумать, какой индекс сортировать или какое значение должно быть особенным, может подойти что-то подобное:
function specialSort(array &$array, $index, $specialvalue){
$callback = function($a,$b) use ($index, $specialvalue) { //closure
if ($a[$index] == $b[$index]) return 0;
if ($a[$index] == $specialvalue) return -1;
if ($b[$index] == $specialvalue) return 1;
return ($a[$index] < $b[$index]) ? -1 : 1;
} ;
uasort($array, $callback);
}
$arr=array(
'a'=>array('thing'=>'yay','who'=>'owee'),
'foo'=>array('thing'=>'boo','who'=>'wik'),
'd'=>array('thing'=>'kil','who'=>'ilo'),
'b'=>array('thing'=>'ser','who'=>'uyt'),
'zed'=>array('thing'=>'efv','who'=>'qet')
);
specialSort($arr,'who','ilo');
print_r($arr);
Дает результат:
Array
(
[d] => Array
(
[thing] => kil
[who] => ilo //special value
)
[a] => Array
(
[thing] => yay
[who] => owee
)
[zed] => Array
(
[thing] => efv
[who] => qet
)
[b] => Array
(
[thing] => ser
[who] => uyt
)
[foo] => Array
(
[thing] => boo
[who] => wik
)
)