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:
JavaScript
x
$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:
JavaScript
[
["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:
JavaScript
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";
}
Advertisement
Answer
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:
JavaScript
<?php
sort($ad_users);
// I've copied this section as-is, it looks like it could be improved
// but I can't be sure I'm making the correct improvements without seeing
// the original data
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;
}
for ($x = 0; $x < count($ad_users); $x++) {
echo $ad_users[$x]['name']."n";
}
?>