PHP sort array alphabetically using a subarray value
0
我的数组看起来像:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Array(
[0] => Array(
[name ] => Bill
[age ] => 15
),
[1] => Array(
[name ] => Nina
[age ] => 21
),
[2] => Array(
[name ] => Peter
[age ] => 17
)
); |
我想根据他们的名字按字母顺序排列。我看到了按子数组值排列的PHP排序数组,但它没什么帮助。你知道怎么做吗?
- 您链接的问题包含您需要的确切答案。只需在比较函数中用'name'替换'optionNumber'。投票关闭为副本。如果有其他问题你不明白,请具体问一下。
- 我从未见过一个数组具有两个值的相同键。也许这就是为什么这种方法不起作用?
这是你的答案,100%有效,我已经测试过了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?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); |
- 一体式:usort($array,函数($a,$b)返回strcmp($a["name"],$b["name"]););
- @pmrotule:仅适用于版本>php 5.3
- 值得注意的是,strcmp具有判例意义。我花了一段时间才弄明白为什么按字母顺序排序没有给出预期的结果。我更改了上述代码以返回以下内容:return strcmp(strtolower($A["name"])、strtolower($B["name"]);
- @安德鲁,你也可以使用strcasecmp函数。它比较了不区分大小写的字符串。参见php.net/manual/en/function.strcasecmp.php
- 在您在使用的方法范围内指定compare方法之前,这是完全有效的。
- $A不明确…我是同一个数组吗?
- 如果要保留索引值,请使用"uasort"
usort是你的朋友:
1 2 3 4 5 6
| function cmp ($a, $b)
{
return strcmp($a["name"], $b["name"]);
}
usort($array,"cmp"); |
- 非常感谢
- 如果我们想要年龄,那么CMP的功能会发生什么变化而不是STRCMP?
- @bhavinshummar只是简单的return $a["age"] - $b["age"]。
- 谢谢@ ccKEP。我用这个方法解决了我的问题。