国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP實現的多維數組排序算法分析

2024-09-04 11:46:41
字體:
來源:轉載
供稿:網友

本文實例講述了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. //Vevb.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就好啦!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 无极县| 金溪县| 固原市| 庆元县| 巩留县| 海门市| 高邑县| 裕民县| 静宁县| 赫章县| 成武县| 沁源县| 吴堡县| 上虞市| 乐都县| 鞍山市| 离岛区| 苏尼特左旗| 三亚市| 盈江县| 黑河市| 无锡市| 宜黄县| 饶河县| 舟山市| 安龙县| 宁都县| 呼伦贝尔市| 宝山区| 师宗县| 深圳市| 肇源县| 新化县| 西乌珠穆沁旗| 荥经县| 长宁区| 图木舒克市| 龙江县| 通渭县| 道真| 关岭|