PHP:按字母顺序排序数组

时间:2016-05-12 08:37:12

标签: php arrays sorting

我想按名字的字母顺序对以下数组进行排序:

enter image description here

到目前为止我做了什么:

<?php
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";
}
?>

结果是:

enter image description here

所有医生(博士)的字母顺序然后是所有(先生)的新字母顺序,最后是所有(女士)的另一个字母顺序, 为什么? 它的一个阵列!!

5 个答案:

答案 0 :(得分:1)

    <?php
        uasort($array, function($a, $b) {
            $needles = ['Dr.', 'Ms.', ];
            $a = trim(str_replace($needles,'', $a['name']));
            $b = trim(str_replace($needles,'', $b['name']));
            if ($a == $b) {
                return 0;
            }
            return ($a < $b) ? -1 : 1;
        });

答案 1 :(得分:0)

您应准备数据(删除所有博士,女士等),然后仅对清理过的名称进行排序。

答案 2 :(得分:0)

您在评论中明确说明您最初的名称为firstname lastname, title,因此您只需要先排序,然后将标题移到前面:

<?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";
}
?>

答案 3 :(得分:0)

首先:不要在for循环中计算()一个常量数组! 您使用不存在的分隔符来爆炸(),因此生成的数组只有一个元素,您可以使用array_pop()删除它。然后你排序()和implode()一个空数组。 所以你得到一个随机的(在这种情况下没有变化)结果。

请检查http://php.net/usort

答案 4 :(得分:0)

您可以将代码更改为

<?php
function sortByOrder($a, $b) {
     $prefix = ['Mr.', 'Ms.','Dr.'];
     $a = trim(str_replace($prefix,"", $a['name']));
     $b = trim(str_replace($prefix,"", $b['name']));

    return $a > $b;
}

$myArray = array(
      array("name"=>"Dr.    bbb"),
      array("name"=>"Mr. aaa"),
      array("name"=>"Ms.  ccc")
);

$abc = usort($myArray, 'sortByOrder');
print_r($myArray);
?>

点击此处:https://eval.in/569467

输出将是:

Array
(
    [0] => Array
        (
            [name] => Mr. aaa
        )

    [1] => Array
        (
            [name] => Dr.    bbb
        )

    [2] => Array
        (
            [name] => Ms.  ccc
        )

)