【问题标题】:sorting array of names in php在php中排序名称数组
【发布时间】:2010-07-28 00:29:18
【问题描述】:

我有一组人名:

Array
(
    [1] => A. Aitken
    [2] => A. C. Skinner
    [3] => A. Chen
    [4] => R. Baxter
)

在php中按姓氏(字母)顺序对数组进行排序的最快方法是什么?即给予

Array
(
    [1] => A. Aitken
    [4] => R. Baxter
    [3] => A. Chen
    [2] => A. C. Skinner
)

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:
    function cmp($a, $b)
    {
        $a1 = explode(' ', $a);
        $b1 = explode(' ', $b);
        return strcasecmp(end($a1), end($b1));
    }
    
    usort($arr, 'cmp');
    

    【讨论】:

      【解决方案2】:

      查看uksort 和那里给出的示例,这与您的问题非常相似。

      你可能想用

      替换那里的正则表达式
      preg_replace("/[A-Z]\\. /", '', $a);
      

      【讨论】:

      • 谢谢 - 这行得通。为了完整起见,您可能只想更正模式中的错字 - 我认为它应该是“@[A-Z]\\.@”(或“/[A-Z]\\./”)。
      【解决方案3】:

      您可以使用 decorate-sort-undecorate 模式进行排序,键是数组的最后一个元素,这是用空格分割字符串的结果

      $arr = array(                                                                                                                                               
      'A. Aitken',                                                                                                                                               
      'A. C. Skinner',                                                                                                                                           
      'A. Chen',                                                                                                                                                 
      'R. Baxter'                                                                                                                                                
      );                                                                                                                                                          
      
      // actual sorting below                                                                                                                                     
      $arr= array_map(create_function('$a', 'return array(array_slice(explode(" ", $a), -1), $a);'), $arr); // transform into array of arrays consisted of sort key and item  
      sort($arr); // sort array of arrays                                                                                                                         
      $arr = array_map('end', $arr); // take only last element from each array                                                                                    
      
      print_r($arr);                                                                                                                                              
      

      【讨论】:

      • 这给出了很多E_STRICT 警告。
      • @Daniel Egeberg - 谢谢,我已将 end() 替换为 array_slice(,-1);
      猜你喜欢
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多