2018-07-13 14:39:54 1104瀏覽
扣丁學(xué)堂官網(wǎng)后臺有學(xué)員留言說自己面試PHP開發(fā)開發(fā)工程師的時候遇到了一個面試題,把一個多維數(shù)組排序。今天扣丁學(xué)堂PHP培訓(xùn)小編大家簡單分析一下把一個多維數(shù)組排序,想要了解的小伙伴就隨小編一起來看一下吧。
例:
<?php //有一個多維數(shù)組 $a = array( array('key1'=>940, 'key2'=>'blah'), array('key1'=>23, 'key2'=>'this'), array('key1'=>894, 'key2'=>'that') ); //那么怎么對key1或者key2進(jìn)行排序呢,這里就需要使用到usort($arr, 'myfunction')函數(shù)了,它的作用是對$arr使用我們自定義的方法進(jìn)行排序,具體使用方法可以查看手冊 //1.對key1的值進(jìn)行排序 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; } } //進(jìn)行排序 usort($a, 'asc_key1_sort'); var_dump($a); //2.對key2字符進(jìn)行排序 function asc_key2_sort($x, $y) { //可以使用strcasecmp()函數(shù)進(jìn)行排序 echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'<br/>'; return strcasecmp($x['key2'], $y['key2']); } //進(jìn)行排序 usort($a, 'asc_key2_sort'); var_dump($a); ?>
運(yùn)行結(jié)果:
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" } }
如果我的多維數(shù)組中也有key值呢?
<?php //有一個多維數(shù)組 $a = array( 123 => array('key1'=>940, 'key2'=>'blah'), 349 => array('key1'=>23, 'key2'=>'this'), 43 => array('key1'=>894, 'key2'=>'that') ); //那么怎么對key1或者key2進(jìn)行排序呢,這里就需要使用到usort($arr, 'myfunction')函數(shù)了,它的作用是對$arr使用我們自定義的方法進(jìn)行排序,具體使用方法可以查看手冊 //1.對key1的值進(jìn)行排序 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; } } //進(jìn)行排序 usort($a, 'asc_key1_sort'); var_dump($a); //2.對key2字符進(jìn)行排序 function asc_key2_sort($x, $y) { //可以使用strcasecmp()函數(shù)進(jìn)行排序 echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'<br/>'; return strcasecmp($x['key2'], $y['key2']); } //進(jìn)行排序 usort($a, 'asc_key2_sort'); var_dump($a); ?>
運(yùn)行結(jié)果:
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" } }
這樣的排序結(jié)果不會保留123,349,43。這時候只要把usort()換成uasort就好啦!
以上就是扣丁學(xué)堂PHP在線學(xué)習(xí)小編給大家分享的PHP實現(xiàn)多維數(shù)組排序算法分析,希望對小伙伴們能有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢??鄱W(xué)堂是專業(yè)的PHP培訓(xùn)機(jī)構(gòu),不僅有專業(yè)老師授課的PHP培訓(xùn)班讓大家參加學(xué)習(xí),還有與時俱進(jìn)的課程體系以及大量的PHP在線視頻供學(xué)員免費(fèi)學(xué)習(xí),想要學(xué)好PHP高薪就業(yè)的小伙伴不要再猶豫了,抓緊時間行動吧??鄱W(xué)堂PHP技術(shù)交流群:374332265。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“php培訓(xùn)資訊”的相關(guān)文章>>