php - 根据一列中的值对行数组进行自然排序

标签 php sorting multidimensional-array natural-sort

我有这个多维数组:

$data[] = array('name' => 'Mini 16', 'id' => 105);
$data[] = array('name' => 'Mini 15', 'id' => 5650);
$data[] = array('name' => 'Mini 100', 'id' => 9889);
$data[] = array('name' => 'Mini 20', 'id' => 587);

我想按 name 列自然排序对数组进行排序,但这对我来说很难。

预期结果:

[
    ['name' => 'Mini 15', 'id' => 5650],
    ['name' => 'Mini 16', 'id' => 105],
    ['name' => 'Mini 20', 'id' => 587],
    ['name' => 'Mini 100', 'id' => 9889]
]

最佳答案

您可以使用 usort()通过自定义函数对数组进行排序,并使用 strnatcmp()像这样对两个字符串进行自然比较:

usort( $data, function( $el1, $el2) { return strnatcmp( $el1['name'], $el2['name']); });

所以之前,你的数组是这样的:

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 16"
    ["id"]=>
    int(105)
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 15"
    ["id"]=>
    int(5650)
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(8) "Mini 100"
    ["id"]=>
    int(9889)
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 20"
    ["id"]=>
    int(587)
  }
}

now it looks like :

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 15"
    ["id"]=>
    int(5650)
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 16"
    ["id"]=>
    int(105)
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 20"
    ["id"]=>
    int(587)
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(8) "Mini 100"
    ["id"]=>
    int(9889)
  }
}

请注意,对于较低版本的 PHP,您将无法使用匿名函数,而是需要这样的函数:

usort( $data, create_function( '$el1, $el2', 'return strnatcmp( $el1[\'name\'], $el2[\'name\']);' ));

关于php - 根据一列中的值对行数组进行自然排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314923/

相关文章:

php - 如何使用 Paypal API(masspay 替代方案)向我的网站用户付款

php - 无法上传多个具有不同扩展名的文件?

PHP PDO插入无法正常工作,没有错误

php - 对数据库中的数据进行排序 (DESC/ASC) 并使用 JSON 发送它们

javascript - jQuery sortable 当排序元素的 id 按升序而不是排序顺序排序时

javascript - 使用背包变体的最佳 MLB 阵容

php - SQLSTATE[42S02] : Base table or view not found: 1146 Table X doesn't exist

list - 在序言中对原子进行排序

c# - 如何计算多维数组中每一行的平均值

pointers - 字符数组的二维数组PROGMEM Arduino