【问题标题】:Sort a multidimensional array by Last name in php在php中按姓氏对多维数组进行排序
【发布时间】:2019-12-10 09:41:55
【问题描述】:

是否可以通过 姓氏 对这样的数组进行排序(使用 php):

$array = array(
    array("name" => "Mary Johnson","age" => 43),
    array("name" => "Amanda Miller","age" => 23),
    array("name" => "James Brown","age" => 47),
    array("name" => "Patricia Williams","age" => 31),
    array("name" => "Michael Davis","age" => 15),
    array("name" => "Sarah Miller","age" => 35),
    array("name" => "Patrick Miller","age" => 44)
  ); 
<?php
// A function to sort by last name.
function lastNameSort($a, $b) {
    $aLast = end(explode(' ', $a));
    $bLast = end(explode(' ', $b));

    return strcasecmp($aLast, $bLast);
}


// The array of data.
$array = array(
    array("name" => "Mary Johnson","age" => 43),
    array("name" => "Amanda Miller","age" => 23),
    array("name" => "James Brown","age" => 47),
    array("name" => "Patricia Williams","age" => 31),
    array("name" => "Michael Davis","age" => 15),
    array("name" => "Sarah Miller","age" => 35),
    array("name" => "Patrick Miller","age" => 44)
  );

// Perform the sort:
uasort($array, 'lastNameSort');

// Print the result:
print_r($array);

【问题讨论】:

标签: php arrays sorting multidimensional-array


【解决方案1】:

这只是一个解决问题。修改你的函数如下,记住$a$b是数组而不是标量变量。

$array = array(
    array("name" => "Mary Johnson","age" => 43),
    array("name" => "Amanda Miller","age" => 23),
    array("name" => "James Brown","age" => 47),
    array("name" => "Patricia Williams","age" => 31),
    array("name" => "Michael Davis","age" => 15),
    array("name" => "Sarah Miller","age" => 35),
    array("name" => "Patrick Miller","age" => 44)
  ); 

function sortByName($a, $b) {
    $aLast = explode(' ', $a['name'])[1];
    $bLast = explode(' ', $b['name'])[1];

    return strcasecmp($aLast, $bLast);
}

#print_r($array);
usort($array, 'sortByName');
print_r($array);

结果

Array
(
    [0] => Array (   [name] => James Brown       [age] => 47 )
    [1] => Array (   [name] => Michael Davis     [age] => 15 )
    [2] => Array (   [name] => Mary Johnson      [age] => 43 )
    [3] => Array (   [name] => Amanda Miller     [age] => 23 )
    [4] => Array (   [name] => Sarah Miller      [age] => 35 )
    [5] => Array (   [name] => Patrick Miller    [age] => 44 )
    [6] => Array (   [name] => Patricia Williams [age] => 31 )
)

为了让Millers 按名字和姓氏以正确的顺序排列,您需要对排序函数稍作修改,如下所示

function sortByName($a, $b) {
    $t = explode(' ', $a['name']);
    $aLast = $t[1] . $t[0];
    $t = explode(' ', $b['name'])[1];
    $bLast = $t[1] . $t[0];

    return strcasecmp($aLast, $bLast);
}

【讨论】:

  • 太棒了!非常感谢!
猜你喜欢
  • 2015-05-25
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多