<?php
$array = [
['woid'=>'17643-2','schedule'=>'ASAP'],
['woid'=>'17643-1','schedule'=>'ASAP'],
['woid'=>'NC324-1','schedule'=>'ASAP'],
['woid'=>'17642-1','schedule'=>'URGENT'],
['woid'=>'NC323-1','schedule'=>'URGENT'],
['woid'=>'17644-1','schedule'=>'JAN'],
];
$order = ['URGENT','JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC','ASAP'];
$order = array_flip($order);
usort($array, function($a, $b) use ($order) {
$aNC = strpos($a['woid'], 'NC') === 0;
$bNC = strpos($b['woid'], 'NC') === 0;
return ($bNC - $aNC) ?: ($order[$a['schedule']] - $order[$b['schedule']]) ?: strcmp($a['woid'], $b['woid']);
});
var_dump($array);
preferences:
31.13 ms | 408 KiB | 5 Q