加入收藏 | 设为首页 | 会员中心 | 我要投稿 平凉站长网 (https://www.0933zz.com.cn/)- 图像处理、语音技术、媒体智能、运维、低代码!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP关联数组排序几种方法

发布时间:2022-07-25 08:55:44 所属栏目:PHP教程 来源:互联网
导读:对于普通数据排序我们直接使用系统自带数组排序函数即可,如果是关系数组排序你知道如何操作吧?下面来给各位整理了几个例子大家一起来看看吧. 参数说明:$data 目标数组 $key 排序字段, $sort 排序规则,代码如下: function getSortArray($data,$key,$sort=ASC
  对于普通数据排序我们直接使用系统自带数组排序函数即可,如果是关系数组排序你知道如何操作吧?下面来给各位整理了几个例子大家一起来看看吧.
 
  参数说明:$data 目标数组 $key 排序字段, $sort 排序规则,代码如下:
 
  function getSortArray($data,$key,$sort='ASC')
  {
      if(!is_array($data))
      {
         return false;
      }
          
      $len = count($data);
      
      for($k=1; $k<$len; $k++)
      {
        for($j=$len-1,$i=0;$i<$len-$k;$i++,$j--)
        {
          if(strtoupper($sort) == 'DESC')
          {
             $flag = $data[$j][$key]>$data[$j-1][$key];
          }
          else
          {
             $flag = $data[$j][$key]<$data[$j-1][$key];
          }  
      
          if($flag)
          {
            $tmp  = $data[$j];
            $data[$j]   = $data[$j-1];
            $data[$j-1] = $tmp;
          }  //开源软件:phpfensi.com
        }
      }
      return $data;
  }
  //使用方法:
  $a = array(
         array('name'=>'stone','age'=>17,'sex'=>'男'),
         array('name'=>'sunny','age'=>28),
         array('name'=>'grass','age'=>16,'sex'=>'女'),
         array('name'=>'sea','age'=>15,'birthday'=>'1987-08-16')
       );
  print_r(getSortArray($a,'age','desc'));
  //结果:
  Array
  (
     [0] => Array
         (
             [name] => sunny
             [age] => 28
         )
   
     [1] => Array
         (
             [name] => stone
             [age] => 17
             [sex] => 男
         )
   
     [2] => Array
         (
             [name] => grass
             [age] => 16
             [sex] => 女
         )
   
     [3] => Array
         (
             [name] => sea
             [age] => 15
             [birthday] => 1987-08-16
         )
   
  )
  不知道你有没有看懂呢?没懂我们再看两个数组排序例子,要对数组针对age字段进行排序,php自带的简单sort功能函数,显然都不能满足需求,因此需要自己写一个快速排序代码来实现相应的需求,代码如下:
 
  <?php
  /**  
   * Description:获取中枢点的位置  
   *  
   * @param array $array              
   * @param int $left              
   * @param int $right              
   * @param string $field              
   * @return int  
   */   
  function fetchArrayPivot (&$array, $left, $right, $field)   
  {   
      // 基准定义   
      $stand = $array[$left];   
         
      // 遍历数组   
      while ($left < $right) {   
          while ($left < $right && $array[$right][$field] >= $stand[$field]) {   
              $right --;   
          }   
          if ($left < $right) {   
              $array[$left ++] = $array[$right];   
          }   
             
          while ($left < $right && $array[$left][$field] <= $stand[$field]) {   
              $left ++;   
          }   
          if ($left < $right) {   
              $array[$right --] = $array[$left];   
          }   
      }   
         
      // 获取中枢点位置   
      $array[$left] = $stand;   
         
      return $left;   
  }   
     
  /**  
   * Description:快速排序主程序  
   *  
   * @param array $array              
   * @param int $begin              
   * @param int $end              
   * @param string $field              
   */   
  function quickSort (&$array, $begin, $end, $field)   
  {   
      // 变量定义   
      $pivot = null;   
         
      if ($begin < $end) {   
          $pivot = fetchArrayPivot($array, $begin, $end, $field);   
          quickSort($array, $begin, $pivot - 1, $field);   
          quickSort($array, $pivot + 1, $end, $field);   
      }   
  }  
  ?>
  调用示例:
 
  <?php   
  $array = array(   
          array(   
                  'name' => "xiao",   
                  'age' => 3   
          ),   
          array(   
                  'name' => 'wang',   
                  'age' => 1   
          ),   
          array(   
                  'name' => 'chen',   
                  'age' => 2   
          ),   
          array(   
                  'name' => 'zhengyi',   
                  'age' => 4   
          ),   
          array(   
                  'name' => 'chai',   
                  'age' => 14   
          )   
  );   
     
  $begin = getTime();   
  quickSort($array, 0, count($array) - 1, 'age');   
  print_r($array);   
  $end = getTime();   
  $spend = $end - $begin;   
  //开源软件:phpfensi.com
  echo "花费时间为:".$spend."秒n";   
     
  function getTime()   
  {   
      list($msec, $sec) = explode(" ", microtime());   
      return (float)$msec + (float)$sec;   
  }
  ?>

(编辑:平凉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读