在之前的文章→《PHP數(shù)組學(xué)習(xí)之比較數(shù)組元素,獲取第一大和第二大值》中,我們介紹了使用for循環(huán)一一比較數(shù)組中元素的大小,獲取數(shù)組中最大值和第二大值的方法。是不是覺得這種方法有點(diǎn)復(fù)雜,其實(shí)我們完全可以利用PHP函數(shù)來(lái)獲取最大值和第二大值,下面來(lái)學(xué)習(xí)下~
本文的主題和上一篇一樣:“給出一組數(shù)字,計(jì)算出它的最大值和第二大值”。但我們這次不使用for循環(huán)和if語(yǔ)句,我們借助PHP內(nèi)置函數(shù)來(lái)實(shí)現(xiàn)。
定義一個(gè)包含這樣一組數(shù)據(jù)的數(shù)組:
$arr = array(555,5,1,429,18,21,52,2,52,9,3,);
想要取出最大值555和第二大值429。
實(shí)現(xiàn)思想1:
其實(shí),在PHP中有一個(gè)內(nèi)置的max()函數(shù),利用它一步就可以獲取數(shù)組中的最大值;然后我們可以在數(shù)組中去除這個(gè)最大值,在剩下的元素中再使用max()函數(shù)來(lái)獲取最大值即可。
我們來(lái)看看實(shí)現(xiàn)代碼:
<?php header("content-type:text/html;charset=utf-8"); $arr = array(555,5,1,429,18,21,52,2,52,9,3,); $max = max($arr); $arr = array_diff($arr,array($max)); $secMax = max($arr); echo "最大值為".$max.",第二大值為".$secMax; ?>
分析:
-
使用
max($arr)
獲取數(shù)組最大值賦值給$max
。 -
然后創(chuàng)建一個(gè)只包含$max一個(gè)值的新數(shù)組,將該數(shù)組和$arr數(shù)組比較,取差值;簡(jiǎn)單來(lái)說(shuō),
array_diff($arr,array($max))
就是用來(lái)刪除最大值$max
。 -
最后在調(diào)用一次
max($arr)
在剩下的元素中取最大值,就獲得到原數(shù)組的第二大元素,將該值賦給$secMax
。
因此輸出結(jié)果為:
實(shí)現(xiàn)思想2:
可以給數(shù)組按照元素?cái)?shù)值的大小進(jìn)行升序或者降序排序,那么數(shù)組的最大值和第二大值就是:第一和第二(降序)或者倒數(shù)第一和倒數(shù)第二(升序)的元素
//升序排序 $arr = array(555,5,1,429,18,21,52,2,52,9,3,); sort($arr); var_dump($arr);
//降序排序 $arr = array(555,5,1,429,18,21,52,2,52,9,3,); rsort($arr); var_dump($arr);
我們?nèi)〕鲞@兩個(gè)元素即可。下面來(lái)看看實(shí)現(xiàn)代碼:
<?php header("content-type:text/html;charset=utf-8"); $arr = array(555,5,1,429,18,21,52,2,52,9,3,); //降序排序 rsort($arr); $max = $arr[0]; $secMax = $arr[1]; echo "最大值為".$max.",第二大值為".$secMax."<br>"; //升序排序 sort($arr); $len = count($arr); //數(shù)組長(zhǎng)度 $max = $arr[$len-1]; $secMax = $arr[$len-2]; echo "最大值為".$max.",第二大值為".$secMax; ?>
輸出結(jié)果:
升序方法還要考慮數(shù)組長(zhǎng)度問(wèn)題,相比之下降序方法比較簡(jiǎn)單點(diǎn)。
好了就說(shuō)到這里了,有其他想知道的,可以點(diǎn)擊這個(gè)哦?!?→php視頻教程
最后給大家推薦一個(gè)PHP數(shù)組的免費(fèi)視頻教程:PHP函數(shù)之a(chǎn)rray數(shù)組函數(shù)視頻講解,快來(lái)學(xué)習(xí)吧!