Вы могли бы сделать что-то вроде этого (я полагаю, это то, что Сэмюэль Лопес также предлагает в комментариях):
$arr = array ('north', 'west', 'south', 'east', );
function compass_sort ($a, $b)
{
$cmptable = array_flip (array (
'north',
/* you might want to add 'northeast' here*/
'east',
/* and 'southeast' here */
'south',
'west',
));
$v1 = trim (mb_strtolower ($a));
$v2 = trim (mb_strtolower ($b));
if ( ! isset ($cmptable[$v1])
|| ! isset ($cmptable[$v2]))
{
/* error, no such direction */
}
return $cmptable[$v1] > $cmptable[$v2];
}
usort ($arr, 'compass_sort');
Это присваивает номер каждому направлению и сортирует по этому номеру, north
будет присвоен ноль, east
один (если вы не добавите что-то промежуточное) и т. Д.