1
2
3
4
5
6
7
8
9
10
11

數組函數

發(fā)布時(shí)間:2017-07-20 08家技:04   家微 發(fā)布人:毛書朋 &nbs樹和p; 浏覽次數:6884

 

關聯課件:8子項目八 -數組函數(點擊在線預覽)

 

 

  8.3.2  數  組  函  數

 

8.3.2.1  數組函數概述       

    錢員    &nbs如裡p;  &nb東了sp;  &nbs飛書p;    謝雜      了我;     &nbs說是p;     &nbs體體p;    姐還;     

數組是編程中的重要元素,在PHP中也不例外。在PHP語法部子黃分已經(jīng)介紹了數組的定義和理短使用,對(duì)數組有了一定了解。PHP中爸了還(hái)爲用戶提供了一系列用來操作數組的函數,這(zhè)些做光函數爲标準函數,可以直接使用。表8-1列出了PHP5.1.6提國姐供的數組函數。

8-1.1.png

8-1.2.png

8-1.3.png

 

看到這(zhè)個表讀者可能(néng)大月跳吃一驚,PHP開(kāi)發(fā)者竟然提供了如新紅此豐富的函數!實際上,PHP提供的數組操作函數多達110多個,表8-1中并未列答藍出全部函數,而隻列出了其中較爲常用的函數。

即使是表中列出的函數,這(zhè)裡(lǐ)也不可能(n醫服éng)一一講解其使用方法。下面(m好飛iàn)將(jiāng)著(zhe)重通麗講解其中最爲常用的幾個,其他函數讀者可以參考PHP手冊來學(xué)習其使用方法。有些讀者可能(néng)會(huì)來刀被(bèi)這(zhè)密密麻麻的物低函數吓倒,認爲學(xué)習PHP很難。實際上每一個學(xué)習者都(dōu)不可能(néng了鄉)把這(zhè)所有的函數都(dōu)記住。除了少量近也的極爲常用函數需要記住以外,其他大多數函數都(dōu)沒(年內méi)有必要去死記硬背。一種(zhǒng)比較好體湖(hǎo)的學(xué)習方法是將(ji北視āng)所有函數浏覽一遍,并大體記住其功能(néng)。等到編程中東個遇到類似問題時(shí),可以通過(guò)查找函數手冊找問場到函數的使用方法,然後(hòu)應用到程序中。實際上腦月很多編程語言的函數庫、類庫都(dōu)很龐大,兵男不可能(néng)短時(shí)間内全部掌握,都(dō山睡u)有一個逐漸熟悉、積累的過(guò)程。

下面(miàn)以幾個函數爲例來說(shuō)明數組處理函數的使用。

8.3.2.2  array()函數

 

array()函數用來建立一個新數組。函數的參數可以是一個混合類型。下面(水見miàn)看一個例子。

1:  <!--文件8-1.php:用array()函數建立數組-->

2:  <HTML>

3:      &l問要t;HEAD>

4:    他爸   小有;   <影技;TITLE>array函數的使用</TITLE>

5:  &nbs女朋p;   </HEAD>

6:   &nb制朋sp;  <BODY>

7:   劇理;  &nb藍河sp;    <?php飛離

8:    &機物nbsp;  &nbs員拿p;   $arr1=array(0好關,1,2,3,4);

9:     &nb鄉路sp;    書員; $arr2=array("a&離區quot;=>0,"b"=>1,&qu個又ot;c"=>2,"d"=>分紅;3,"e"放河;=>4);

10:     你木;   &nb媽信sp; echo "$arr1[0]=".$arr1[0]懂房;

11:      &nbs但物p;   echo "<她近;br>";

12:     &nb煙西sp;    echo "$arr2[說煙"a"]=&quo爸哥t;.$arr2["a"];

13:      請門;   ?&技風gt;

14:   玩討  </body>

15: </HTML&g討什t;

程序8-1.php中首先用array()函數定義了擁有5個元素的數組$arr1,并且每個元素分别賦值01234。然後(hòu)定義了同樣(yàng)5個元素的數組$arr2,并分别賦值01234。兩(liǎng)個數組的不同是第一個數組用了默認的數字作爲下标,第二個和店數組用了自定義的字符作爲下标。因此最後(hòu)輸出數組元素化長時(shí)也使用了各自對(duì)應的下得能标。程序的運行結果如圖8-3所示。

8-3.jpg

8-3  程序8-1.php的運行結果

 

8.3.2.3  count()函數

count()函數可以用來統計一個數組中元素的個數,在循術費環遍曆一個未知長(cháng)度的數妹笑組時(shí)非常有用。看下面(miàn)的例子。

1:  <!--文件8-2.phpCount函數的使用-->

2:  <HTML>

3:   說間   <HEAD>

4:   &明地nbsp;    雪跳   <TITLE&為分gt;Count函數的使用</TITLE>

5:   &nbs紅什p;   </HEA秒窗D>

6:  &nb門我sp;  &n火志bsp; <BODY>

7:     &nb錯線sp;    &nb火購sp; <?php

8:    &nb樹還sp;    &nbs關金p;     $arr相吃1=array(0,1,2,3靜筆,4);

9:     內身;    &業土nbsp;    &麗月nbsp;Echo "熱笑;數組$arr1中元素的個數爲:".count($ar學放r1);

10:      吧商     ?>火喝

11:    動大;  </BODY>

12: <HTML>

程序運行後(hòu)將(jiāng)輸出:“數組$arr1中元素個數爲:5”。

8.3.2.4  each()函數

each()函數可以返回一個數組中當前元素的鍵和值,并將(ji訊湖āng)數組指針向(xiàng)前移動一步,數術常常被(bèi)用在循環中來遍曆一個數組。

1:  <!--文件8-3.phpeach函數的使用-->

2:  <HTML>

3:   <HEAD>

4:     月還; <TITLE>each函數的使用</TITLE>

5:      </H匠拿EAD>

6:      <BODY>內對;

7:   &nb弟他sp;    &nbs如跳p; <?php

8:      這通;   &n木是bsp;    $arr = array("黃少;name"=>"Bob"相音;,"age"=>20,&qu文個ot;sex"=>"male", "postcode&qu去如ot;= > &歌林nbsp; "100000"筆人);

9:    窗冷;   熱習    &nb關資sp;  for($i=0;$i<c美到ount($arr);$i  ){

10:    路服    樹外     &n相得bsp;   書離$keyAndValue=Each($arr);

11:      &nb做答sp;    大土   也物;   echo 銀線$keyAndValue["k報看ey"]."=>".$keyA物他ndValue["value"相關];

12:     爸煙;  &n黃黃bsp;      視短;   echo &藍錢quot;<br>";

13:     東們;    }

14:    服明;  &nb時技sp;  ?>

15:   &n跳月bsp; </BODY>

16: </HTML>

程序8-3.php中,首先定義了一個數組$arr,并且爲其賦值。值得注意的是,數組下标不是按順序遞增的數字,而是毫無男從規律的字符串。所以不能(néng)直接用一個遞電裡增的數字作爲下标來輸出,循環輸出遇到了困難。但是也地使用each()函數可以獲得這(zhè)個數組的下标以及下标對(duì)應的個近值,因此就(jiù)可以使用循環輸出到化每一個元素的下标和值。函數each($arr)將(jiāng)$arr數組中當前元素的下标和值都(dō也算u)存放到另外一個數組$kav中,然後(hòu)將(jiāng)數組指針指到下一可綠個元素。$kav數組的下标分别爲keyvalue。這(zhè)樣(yàng)隻城學需要調用$kav["key"]$kav["value"]即可獲的該元素的下标和值。輸出這(zh子高è)兩(liǎng)個值後(hòu)本次循環結束,執行下一術近次循環,這(zhè)樣(yàng)又輸出了下一個元素的值,依此類推,整個數組都輛車(dōu)被(bèi)動态循環黑兵輸出了。程序的運行結果如圖8-4所示。

 

8-4.jpg

8-4  程序8-3.php的運行結果

 

通過(guò)程序8-4.php看到了each()函數的妙用。其實例8-3.php中的代碼還(hái)可以繼續簡化,也可以不用count()函數來統計數組元素的個數,也可以拿暗實現動态循環輸出一個未知長(cháng)度的數組。

1:  <!--文件8-4.phpeach函數的使用-->

2:  <HTML>

3:   <HEAD>

4:   藍文    &l多匠t;TITLE>each函數的使用</TITLE>

5:    </HE就國AD>

6:    <BODY>我新

7:       林都<?php

8:        &nb務北sp;  $arr = array ("name" = >現雨;"Bob", "age"=>2什山0, "sex"可請 = >"male&quo草醫t;, "postcode&quo為女t;=> "100000");

9:    &報市nbsp;  &道山nbsp;   Whi下分le($kav=each($arr)){風少

10:    &n中時bsp;   校爸     &西費nbsp;echo $kav["key音民"]."=>亮內;".$kav["val紙女ue"];

11:    &n報靜bsp;    &nbs為科p;    echo "<br場房>";

12:      理新;   &nbs物長p;    藍動;}

13:    坐森;      ?>

14:     </BODY>

15: </HTML>

程序8-4.php的代碼比程序8-3.php簡潔,實現的效果卻完全相同。例8-4利用了each()函數一個重要性質,那就(jiù)是當數組已經(jī日湖ng)到達末尾時(shí)each()函數返回false。通過(guò)前面(miàn)開森所學(xué)的知識,讀者知道(風唱dào)false是一個布爾值,表示“否”。因此它正好(hǎo)可以作爲我計while循環的結束條件。這(zhè)樣(yàng),可資上以用一個while循環來每次讀取$arr數組中的一個元素,不管數組有多少個元素,當指針到達末尾時(shí),船科each($arr)返回false,循環結束,程序執行完成(chéng)。為答同樣(yàng)實現了動态輸出未知長(cháng)度的數組的功能(né是道ng)。程序的運行結果如圖8-4所示。

通過(guò)例8-4.php也可以說(shuō)明,有時(得音shí)候實現同一個功能(néng),可以選擇多種(zhǒng)途徑。作爲匠站程序開(kāi)發(fā)人員,應該盡量選擇更加簡潔、高效的途徑。

8.3.2.5  current()reset()end()next()prev()函數

 

之所以要將(jiāng)這(zhè)5個函數并列起(qǐ)來介紹,是因爲這(zhè)5個函數的作用相似——它們都(dōu)用來操作數組内部的指針。在PHP中,使用一個内部指針來指向(xià厭視ng)一個數組。需要訪問數組中的某一元自拿素時(shí),隻需要將(jiāng)指針移動到該元素的位置,即可取出做離該元素,這(zhè)大大方便了用戶對(duì)數組的操作。下面(mià近明n)先詳細說(shuō)明這(zh東歌è)5個函數的作用,然後(hòu)通過(guò)一個例子來驗證其使相生用效果。

current():返回當前内部指針所指的元素的值。當到達數組末水服尾時(shí)返回false

reset():將(jiāng)内部指針指向(xiàng)數組的第人媽一個元素,并返回其值。數組爲空時(shí少報)返回false

end():將(jiāng)内部指針指向(xiàng)數組的最後遠子(hòu)一個元素,并返回其值。

next():將(jiāng)數組指針指向(xiàng)當前元素的下一個元素,并返回其值笑高。到達末尾時(shí)返回false

prev():將(jiāng)數組指針指向(xiàng)當前元素的上一個元素,并返回身司其值,當到達頂端時(shí)返回false

上面(miàn)5個函數的返回值均爲mixed類型,根據數組元素值的類型不同書醫而返回不同的類型。在這(zhè)裡(lǐ)要注意current()函數和next()函數的不同。他們雖然都(dōu)是取出一個元素值,但是current()并不移動指針。也就(jiù)是說(shuō)current()返回的是未移動指針之前所指向(xiàng)的元素的值,而next()返回的是移動指針之後(hòu)所指向(xià弟喝ng)的元素的值。下面(miàn)日空來看一個例子。

1:  <!-雪厭-文件8-5.php:數組内部指針移動-->

2:  <HTML>

3:   <HEAD>

4:    &化西nbsp;  <TITLE>數組内部指針移動函數的綜合應用</TITLE>

5:   <風飛;/HEAD>

6:   &空慢nbsp;  <BODY>

7:      &習計nbsp;<?php

8:     視化   $arr=array(1,2,3,歌我4,5,6,7,8,9,10);

9:       e些話cho "調用current():".current黑暗($arr);

10:     &湖去nbsp;   &校校nbsp;echo "<br>&quo算老t;;

11:    &nb森就sp;     動說echo "再次調用current():".current($慢也arr);

12:      &nbs白民p;   echo &南去quot;<br>";

13:      &n妹書bsp;   echo "調用next():".n東分ext($arr);

14:      &睡很nbsp;   echo &鐘月quot;<br>";

15:     &n相近bsp;    echo "調用reset():".reset($arr)民文;

16:   &錯高nbsp;   &n家唱bsp;  echo "<br>相師";

17:   &nb站個sp;   &n門暗bsp;  echo "調用end():".en厭風d($arr);

18:     &nb讀要sp;    echo "<紙短br>";

19:    &nb森自sp;  &n厭行bsp;  &照生nbsp;   echo "調用prev():".prev($arr);

20:      中他;  ?>

21:     </BODY&飛懂gt;

22: </HTML>

程序8-5.php中定義了一個數組$arr,并且用10個數字對(duì)其進(jìn)行了初始化場鐵。然後(hòu)分别調用上述5個函數來觀察其運行效果。爲了使輸出結果直觀,在每一次調用之後(hòu)都靜兵(dōu)輸出一個換行。程序運行結果如圖8-5所示。

8-5.jpg

8-5  程序8-5.php的運行結果

程序8-5.php中定義了一個數組$arr,并且用10個數字對(duì)其進(jìn)行了初始化。然後(hòu)分别調用上述5個函數來觀察其運行效果。爲了使輸出些花結果直觀,在每一次調用之後(hòu)都(dōu)輸出一個換行。程生但序運行結果如圖8-5所示。

下面(miàn)來分析程序的運行流程和對(duì)應的輸出結果:

1)數組初始化完成(chéng),内月著部指針指向(xiàng)第一個元素(元素值爲1)。

2)第一次調用current()函數,返回當前元素值1,指針不變。

3)再次調用current()函數,由于内部指針不變,仍然返回1

4)調用next()函數,内部指針指向(xiàng刀技)下一個元素,并返回其值(返回2)。

5)調用reset()函數,内部指針再次指向(xià業生ng)第一個元素,返回1

6)調用end()函數,内部指針指向(xiàng)最後(hòu)一近市個元素,并返回其值(返回10)。

7)調用prev()函數,内部指針指向(xiàng)前一個元素,并返回其值林線(返回9)。

關于PHP的數組函數,就(jiù)介紹到這(zh什土è)裡(lǐ)。表8-1中列出的其他函數,如果讀者感興趣可以自行編寫程序進(亮音jìn)行測試。函數的參數、返回值類型等均可以通過(guò)查看PHP手冊獲得。

 


  • 程豔秋 2018-01-08 19:36:11
    compact()函數用于將(jiān工報g)兩(liǎng)個或多個變輛兒量轉換爲數組,當然也包含數組變量。其參數是變購小量的名稱而非帶有$全名。相反的函數是厭友extract()作用顧名思義就(jiù)是將(jiāng)數組轉換爲單人老個的字符串,鍵值作爲其字符串名線金稱,數組值作爲字符串的值。
  • 甄丹丹 2018-01-09 15:56:26
    each()函數的一個重要性質,那就(jiù)是當數組已經(jīng)到達笑朋末尾時(shí)each()函數返回f服長alse