【问题标题】:How to sort an array of arrays in php?如何在php中对数组进行排序?
【发布时间】:2010-06-04 23:42:38
【问题描述】:

在 php 中,我有一个关联数组的数值数组:

mainArray: 
[
  array1:['title':'Record a','order':'2'],
  array2:['title':'Record b','order':'4'],
  array3:['title':'Record c','order':'1'],
  array4:['title':'Record d','order':'3']
]

按每个关联数组的“顺序”值对 mainArray 进行排序的最简单方法是什么?

谢谢

【问题讨论】:

标签: php arrays sorting


【解决方案1】:

您可以使用usort 函数。自 PHP 5.4 起,您可以使用闭包函数:

usort($mainArray, function ($a, $b) {
  $a_val = (int) $a['order'];
  $b_val = (int) $b['order'];

  if($a_val > $b_val) return 1;
  if($a_val < $b_val) return -1;
  return 0;
});

或 PHP

usort($mainArray, 'myCompare');

function myCompare($a, $b) {
  $a_val = (int) $a['order'];
  $b_val = (int) $b['order'];

  if($a_val > $b_val) return 1;
  if($a_val < $b_val) return -1;
  return 0;
}

【讨论】:

    【解决方案2】:

    最简单的版本,使用比较函数和usort

    usort($mainArray, function($a, $b) {
      return $a['order'] - $b['order'];
    });
    

    【讨论】:

    • @Dharman,为什么不呢?刚刚检查了最新的 RC,工作正常。
    • 我不记得我为什么这么说。事后看来,我的评论不是很有帮助。对不起
    【解决方案3】:

    我在php documentation comments for asort() 中找到了这个,另请参阅sort() 页面,在 cmets 中有一些不错的候选者。

    function named_records_sort($named_recs, $order_by, $rev=false, $flags=0)
    {// Create 1-dimensional named array with just
     // sortfield (in stead of record) values
        $named_hash = array();
         foreach($named_recs as $key=>$fields)
                 $named_hash["$key"] = $fields[$order_by];
    
     // Order 1-dimensional array,
     // maintaining key-value relations  
        if($reverse) arsort($named_hash,$flags=0) ;
        else asort($named_hash, $flags=0);
    
     // Create copy of named records array
     // in order of sortarray 
        $sorted_records = array();
        foreach($named_hash as $key=>$val)
               $sorted_records["$key"]= $named_recs[$key];
    
    return $sorted_records;} // named_recs_sort()
    
    function show_sorted_records($named_recs, $order_by, $rev=false, $flags=0)
    {$sorted_records=named_records_sort($named_recs, $order_by, $rev, $flags);
    foreach($sorted_records as $name=>$fields)
      {echo "<b>$name</b>   ";
       foreach($fields as $field=>$val)
              echo "$field = $val "; echo "<br>";}
    } // show_sorted_records()
    
    $girl_friends=array();
    $girl_friends["Anna"]=
    array("born"=>'1989-08-22',"cupsize"=>'B-',"IQ"=>105, "daddy"=>'rich');
    $girl_friends["Zoe"]
    =array("born"=>'1978-03-11',"cupsize"=>'C#',"IQ"=>130, "daddy"=>'poor');
    $girl_friends["Lilly"]
    =array("born"=>'1985-06-16',"cupsize"=>'DD',"IQ"=>90, "daddy"=>'nasty');
    
    $order_by="cupsize"; echo "And the winners are: <br>";
    show_sorted_records($girl_friends, $order_by, true);
    

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 2019-11-02
      • 2010-12-04
      • 2014-03-04
      • 1970-01-01
      • 2017-03-20
      • 2011-07-26
      • 2010-10-10
      • 2011-02-11
      相关资源
      最近更新 更多