当前位置:首页 > PHP教程 > php数组 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2018-10-11 12:57:48 浏览: 评论:0 

本文实例讲述了PHP实现的多维数组排序算法。分享给大家供大家参考,具体如下:

突然想起了一道面试题,把一个多维数组排序。

例:

  1. <?php 
  2. //有一个多维数组 
  3. $a = array
  4.   array('key1'=>940, 'key2'=>'blah'), 
  5.   array('key1'=>23, 'key2'=>'this'), 
  6.   array('key1'=>894, 'key2'=>'that'
  7. ); 
  8. //那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, 'myfunction')函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册 
  9. //1.对key1的值进行排序 
  10. function asc_key1_sort($x$y) { 
  11.   //可以输出一下看看是怎么比较的 
  12.   echo 'Iteration:'.$x['key1'].' vs '.$y['key1']; 
  13.   if($x['key1'] > $y['key1']) { 
  14.     echo 'true<br/>'
  15.     return true; 
  16.   }elseif($x['key1'] < $y['key1']) { 
  17.     echo 'false<br/>'
  18.     return false; 
  19.   }else { 
  20.     echo '0'
  21.     return 0; 
  22.   } 
  23. //进行排序 
  24. usort($a'asc_key1_sort'); 
  25. var_dump($a); 
  26. //2.对key2字符进行排序 
  27. function asc_key2_sort($x$y) { 
  28.   //可以使用strcasecmp()函数进行排序 
  29.   echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'<br/>'
  30.   return strcasecmp($x['key2'], $y['key2']); 
  31. //进行排序 
  32. usort($a'asc_key2_sort'); 
  33. var_dump($a); 
  34. ?> 

运行结果:

  1. Iteration:23 vs 940false 
  2. Iteration:894 vs 23true 
  3. Iteration:940 vs 23true 
  4. Iteration:894 vs 940false 
  5. 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 
  6. Iteration:blah vs that 
  7. 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值呢?

  1. <?php 
  2. //有一个多维数组 
  3. $a = array
  4.   123 => array('key1'=>940, 'key2'=>'blah'), 
  5.   349 => array('key1'=>23, 'key2'=>'this'), 
  6.   43 => array('key1'=>894, 'key2'=>'that'
  7. ); 
  8. //那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, 'myfunction')函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册 
  9. //1.对key1的值进行排序 
  10. function asc_key1_sort($x$y) { 
  11.   //可以输出一下看看是怎么比较的 
  12.   echo 'Iteration:'.$x['key1'].' vs '.$y['key1']; 
  13.   if($x['key1'] > $y['key1']) { 
  14.     echo 'true<br/>'
  15.     return true; 
  16.   }elseif($x['key1'] < $y['key1']) { 
  17.     echo 'false<br/>'
  18.     return false; 
  19.   }else { 
  20.     echo '0'
  21.     return 0; 
  22.   } 
  23. //进行排序 
  24. usort($a'asc_key1_sort'); 
  25. var_dump($a); 
  26. //2.对key2字符进行排序 
  27. function asc_key2_sort($x$y) { 
  28.   //可以使用strcasecmp()函数进行排序 
  29.   echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'<br/>'
  30.   return strcasecmp($x['key2'], $y['key2']); 
  31. //phpfensi.com 
  32. //进行排序 
  33. usort($a'asc_key2_sort'); 
  34. var_dump($a); 
  35. ?> 

运行结果:

  1. Iteration:23 vs 940false 
  2. Iteration:894 vs 23true 
  3. Iteration:940 vs 23true 
  4. Iteration:894 vs 940false 
  5. 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 
  6. Iteration:blah vs that 
  7. 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就好啦!

Tags: 多维 数组 算法

分享到: