使用子数组值对PHP数组按字母顺序排序

77

可能是重复问题:
如何在PHP中对数组和数据进行排序?
如何在php中对多维数组进行排序
通过子数组值对PHP数组进行排序
按值对PHP多维数组进行排序

我的数组长这样:

Array(
    [0] => Array(
         [name] => Bill
         [age] => 15
    ),
    [1] => Array(
         [name] => Nina
         [age] => 21
    ),
    [2] => Array(
         [name] => Peter
         [age] => 17
    )
);
我想按照名称字母顺序对它们进行排序。 我看到了 PHP Sort Array By SubArray Value,但没什么用。 有什么办法可以做到这一点吗?

3
你提供的链接包含了你需要的确切答案。只需在比较函数中用 'name' 替换 'optionNumber' 即可。投票将其关闭为重复问题。如果你对其他问题有不理解的地方,请具体询问。 - Mike B
我从未见过一个数组有相同的键和两个值。可能这就是为什么排序不起作用的原因? - hakre
2个回答

180

这是您的答案,它已经被测试过并且百分之百有效。

<?php
$a = Array(
    1 => Array(
         'name' => 'Peter',
         'age' => 17
    ),
    0 => Array(
         'name' => 'Nina',
         'age' => 21
    ),
    2 => Array(
         'name' => 'Bill',
         'age' => 15
    ),
);
function compareByName($a, $b) {
  return strcmp($a["name"], $b["name"]);
}
usort($a, 'compareByName');
/* The next line is used for debugging, comment or delete it after testing */
print_r($a);

41
一行代码:usort($array, function($a, $b){ return strcmp($a["name"], $b["name"]); }); 该代码用于对数组按照元素中的"name"键进行字典序排序。 - pmrotule
4
仅适用于PHP 5.3以上版本。 - Mohit
17
值得注意的是,strcmp区分大小写。花费了我一些时间才弄清楚为什么按字母顺序排序没有给出预期结果。我将上述代码更改为返回以下内容:return strcmp(strtolower($a["name"]), strtolower($b["name"]))。 - Andrew
13
@Andrew,你也可以使用函数strcasecmp来实现。它可以忽略大小写地比较字符串。参见http://php.net/manual/en/function.strcasecmp.php - Brian
2
这个方法完美运行,直到你在使用该方法的作用域内指定比较方法。 - Juliyanage Silva
显示剩余2条评论

18

usort 是你的好朋友:

function cmp($a, $b)
{
        return strcmp($a["name"], $b["name"]);
}

usort($array, "cmp");

如果我们想要年龄,那么在 cmp 函数中应该做出什么改变,而不是 strcmp? - Bhavin Thummar
1
@BhavinThummar 只需简单地写 return $a["age"] - $b["age"] - ccKep
谢谢@ccKep。我已经使用这个解决方案解决了我的问题。 - Bhavin Thummar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接