加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_潮州站长网 (http://www.0768zz.com/)- 物联安全、建站、操作系统、云计算、数据迁移!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP实现的多维数组排序算法分析

发布时间:2022-07-24 12:06:58 所属栏目:PHP教程 来源:互联网
导读:本文实例讲述了PHP实现的多维数组排序算法。分享给大家供大家参考,具体如下: 突然想起了一道面试题,把一个多维数组排序。 例: ?php //有一个多维数组 $a = array( array(key1=940, key2=blah), array(key1=23, key2=this), array(key1=894, key2=that) )
  本文实例讲述了PHP实现的多维数组排序算法。分享给大家供大家参考,具体如下:
 
  突然想起了一道面试题,把一个多维数组排序。
 
  例:
 
  <?php
  //有一个多维数组
  $a = array(
    array('key1'=>940, 'key2'=>'blah'),
    array('key1'=>23, 'key2'=>'this'),
    array('key1'=>894, 'key2'=>'that')
  );
  //那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, 'myfunction')函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册
  //1.对key1的值进行排序
  function asc_key1_sort($x, $y) {
    //可以输出一下看看是怎么比较的
    echo 'Iteration:'.$x['key1'].' vs '.$y['key1'];
    if($x['key1'] > $y['key1']) {
      echo 'true<br/>';
      return true;
    }elseif($x['key1'] < $y['key1']) {
      echo 'false<br/>';
      return false;
    }else {
      echo '0';
      return 0;
    }
  }
  //进行排序
  usort($a, 'asc_key1_sort');
  var_dump($a);
  //2.对key2字符进行排序
  function asc_key2_sort($x, $y) {
    //可以使用strcasecmp()函数进行排序
    echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'<br/>';
    return strcasecmp($x['key2'], $y['key2']);
  }
  //进行排序
  usort($a, 'asc_key2_sort');
  var_dump($a);
  ?>
  运行结果:
 
  Iteration:23 vs 940false
  Iteration:894 vs 23true
  Iteration:940 vs 23true
  Iteration:894 vs 940false
  array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this
  Iteration:blah vs that
  array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }  
  如果我的多维数组中也有key值呢?
 
  <?php
  //有一个多维数组
  $a = array(
    123 => array('key1'=>940, 'key2'=>'blah'),
    349 => array('key1'=>23, 'key2'=>'this'),
    43 => array('key1'=>894, 'key2'=>'that')
  );
  //那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, 'myfunction')函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册
  //1.对key1的值进行排序
  function asc_key1_sort($x, $y) {
    //可以输出一下看看是怎么比较的
    echo 'Iteration:'.$x['key1'].' vs '.$y['key1'];
    if($x['key1'] > $y['key1']) {
      echo 'true<br/>';
      return true;
    }elseif($x['key1'] < $y['key1']) {
      echo 'false<br/>';
      return false;
    }else {
      echo '0';
      return 0;
    }
  }
  //进行排序
  usort($a, 'asc_key1_sort');
  var_dump($a);
  //2.对key2字符进行排序
  function asc_key2_sort($x, $y) {
    //可以使用strcasecmp()函数进行排序
    echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'<br/>';
    return strcasecmp($x['key2'], $y['key2']);
  } //phpfensi.com
  //进行排序
  usort($a, 'asc_key2_sort');
  var_dump($a);
  ?>
  运行结果:
 
  Iteration:23 vs 940false
  Iteration:894 vs 23true
  Iteration:940 vs 23true
  Iteration:894 vs 940false
  array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this
  Iteration:blah vs that
  array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }  
  这样的排序结果不会保留123,349,43。这时候只要把usort()换成uasort就好啦!

(编辑:我爱制作网_潮州站长网)

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

    热点阅读