www.adminn.cn
站长正能量分享网!

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

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

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

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP实现的多维数组排序算法分析》
文章链接:https://www.adminn.cn/news/8430.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏