【问题标题】:PHP sort array alphabetically using a subarray value [duplicate]PHP使用子数组值按字母顺序对数组进行排序[重复]
【发布时间】:2012-05-16 02:38:24
【问题描述】:

可能重复:
How can I sort arrays and data in PHP?
How do I sort a multidimensional array in php
PHP Sort Array By SubArray Value
PHP sort multidimensional array by value

我的数组看起来像:

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,但并没有太大帮助。 任何想法如何做到这一点?

【问题讨论】:

  • 您链接的问题包含您需要的确切答案。只需在比较功能中将'optionNumber' 替换为'name'。投票结束,重复。如果您不理解其他问题中的某些内容,请具体询问。
  • 我从未见过一个数组对两个值具有相同的键。可能这就是排序不起作用的原因?

标签: php arrays


【解决方案1】:

usort是你的朋友:

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

usort($array, "cmp");

【讨论】:

  • 如果我们想要年龄,那么在 cmp 而不是 strcmp 函数中会有什么变化?
  • @BhavinThummar 简单 return $a["age"] - $b["age"].
  • 谢谢@ccKep。我已经使用这个解决方案解决了我的问题。
【解决方案2】:

这是你的答案,它 100% 有效,我已经测试过了。

<?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, function($a, $b){ return strcmp($a["name"], $b["name"]); });
  • @pmrotule: 仅适用于版本> PHP 5.3
  • 值得注意的是 strcmp 区分大小写。我花了一段时间才弄清楚为什么按字母顺序排序没有给出预期的结果。我更改了上面的代码以返回以下内容: return strcmp(strtolower($a["name"]), strtolower($b["name"]));
  • @Andrew,您也可以为此使用函数 strcasecmp。它比较字符串不区分大小写。见php.net/manual/en/function.strcasecmp.php
  • 在您使用的方法范围内指定比较方法之前,此方法非常有效
猜你喜欢
  • 2010-12-12
  • 2014-05-14
  • 2013-11-02
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多