<?php
$array = [
['name' => 'Dr. Hugo Lopez', 'duty' => 'Anesthesiologist', 'link' => ''],
['name' => 'Dr. Dario Garin', 'duty' => 'Orthopedic Specialist', 'link' => 'dr-dario-garin.php'],
['name' => 'Dr. Maclovio YaƱez', 'duty' => 'Plastic Surgeon', 'link' => ''],
['name' => 'Melissa Bracker', 'duty' => 'Patient Liaison', 'link' => ''],
['name' => 'Dr. Diego Guzman', 'duty' => 'Cardiologist', 'link' => ''],
['name' => 'Ivan Arafat', 'duty' => 'Accountant', 'link' => ''],
['name' => 'Jorge Fernandez', 'duty' => 'Hospital Administrator', 'link' => ''],
];
$lookup = array_flip(['Hospital Administrator', 'Plastic Surgeon', 'Orthopedic Specialist']);
$fallback = count($lookup);
usort($array, function ($a, $b) use ($lookup, $fallback) {
$aName = array_reverse(preg_match('~^((?:[a-z]+\.)?) ?(\S+) (.+)~i', $a['name'], $out) ? $out : ['', '', '']);
$bName = array_reverse(preg_match('~^((?:[a-z]+\.)?) ?(\S+) (.+)~i', $b['name'], $out) ? $out : ['', '', '']);
return [$lookup[$a['duty']] ?? $fallback, ...$aName]
<=>
[$lookup[$b['duty']] ?? $fallback, ...$bName];
});
var_export($array);
preferences:
23.44 ms | 408 KiB | 5 Q