VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • PHP实现的多维数组排序算法分析

本文实例讲述了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就好啦!

 

出处:http://www.phpfensi.com/php/20181011/11318.html


相关教程