I want to sort an array of rows by the name column value, but critically I want to sort while ignoring the users' prefixes.
Sample array:
$ad_users = [
["name" => "Mr San", "department" => "five"],
["name" => "Mr VSan", "department" => "six"],
["name" => "Mr QSan", "department" => "four"],
["name" => "Sr ASan", "department" => "two"],
["name" => "Dr ASan", "department" => "one"],
["name" => "Dr FSan", "department" => "three"]
];
Desired result:
[
["name" => "Dr ASan", "department" => "one"],
["name" => "Sr ASan", "department" => "two"],
["name" => "Dr FSan", "department" => "three"],
["name" => "Mr QSan", "department" => "four"],
["name" => "Mr San", "department" => "five"],
["name" => "Mr VSan", "department" => "six"]
]
My current code:
for ($x = 0; $x < count($ad_users); $x++) {
$ad_users[$x]['name']= ucwords($ad_users[$x]['name']);
$end = (explode(',', $ad_users[$x]['name']));
$lastname = array_pop($end);
sort($end);
$firstname = implode(" ", $end);
$ad_users[$x]['name']=$lastname." ".$firstname;
}
sort($ad_users);
for ($x = 0; $x < count($ad_users); $x++) {
echo $ad_users[$x]['name']."\n";
}
You make it clear in your comment that you originally have the name as
firstname lastname, title, so you just need to sort first, then move the title to the front: