1
2
3
4
5
6
7
8
9
10
11

數組函數

發(fā)布時間:2017-07-20 08:04   發(fā)布人:毛書朋   浏覽次數:6909

 

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

 

 

  8.3.2  數  組  函  數

 

8.3.2.1  數組函數概述       

                                              

數組是編程中的重要元素,在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)一一講解其使用方法。下面(miàn)將(jiāng)着重講解其中最爲常用的幾個,其他函數讀者可以參考PHP手冊來學(xué)習其使用方法。有些讀者可能(néng)會被這(zhè)密密麻麻的函數吓倒,認爲學(xué)習PHP很難。實際上每一個學(xué)習者都(dōu)不可能(néng)把這(zhè)所有的函數都(dōu)記住。除了少量的極爲常用函數需要記住以外,其他大多數函數都(dōu)沒(méi)有必要去死記硬背。一種(zhǒng)比較好(hǎo)的學(xué)習方法是將(jiāng)所有函數浏覽一遍,并大體記住其功能(néng)。等到編程中遇到類似問題時,可以通過(guò)查找函數手冊找到函數的使用方法,然後(hòu)應用到程序中。實際上很多編程語言的函數庫、類庫都(dōu)很龐大,不可能(néng)短時間内全部掌握,都(dōu)有一個逐漸熟悉、積累的過(guò)程。

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

8.3.2.2  array()函數

 

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

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

2:  <HTML>

3:      <HEAD>

4:          <TITLE>array函數的使用</TITLE>

5:      </HEAD>

6:      <BODY>

7:          <?php

8:           $arr1=array(0,1,2,3,4);

9:           $arr2=array("a"=>0,"b"=>1,"c"=>2,"d"=>3,"e"=>4);

10:          echo "$arr1[0]=".$arr1[0];

11:          echo "<br>";

12:          echo "$arr2["a"]=".$arr2["a"];

13:         ?>

14:     </body>

15: </HTML>

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

8-3.jpg

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

 

8.3.2.3  count()函數

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

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

2:  <HTML>

3:      <HEAD>

4:           <TITLE>Count函數的使用</TITLE>

5:       </HEAD>

6:       <BODY>

7:            <?php

8:               $arr1=array(0,1,2,3,4);

9:               Echo "數組$arr1中元素的個數爲:".count($arr1);

10:           ?>

11:      </BODY>

12: <HTML>

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

8.3.2.4  each()函數

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

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

2:  <HTML>

3:   <HEAD>

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

5:      </HEAD>

6:      <BODY>

7:          <?php

8:              $arr = array("name"=>"Bob","age"=>20,"sex"=>"male", "postcode"= >   "100000");

9:              for($i=0;$i<count($arr);$i  ){

10:                 $keyAndValue=Each($arr);

11:                 echo $keyAndValue["key"]."=>".$keyAndValue["value"];

12:                 echo "<br>";

13:         }

14:         ?>

15:     </BODY>

16: </HTML>

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

5:    </HEAD>

6:    <BODY>

7:       <?php

8:           $arr = array ("name" = >"Bob", "age"=>20, "sex" = >"male", "postcode"=> "100000");

9:           While($kav=each($arr)){

10:              echo $kav["key"]."=>".$kav["value"];

11:              echo "<br>";

12:              }

13:          ?>

14:     </BODY>

15: </HTML>

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

通過(guò)例8-4.php也可以說明,有時候實現同一個功能(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)一個數組。需要訪問數組中的某一元素時,隻需要將(jiāng)指針移動到該元素的位置,即可取出該元素,這(zhè)大大方便了用戶對(duì)數組的操作。下面(miàn)先詳細說明這(zhè)5個函數的作用,然後(hòu)通過(guò)一個例子來驗證其使用效果。

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

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

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

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

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

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

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

2:  <HTML>

3:   <HEAD>

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

5:   </HEAD>

6:      <BODY>

7:       <?php

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

9:       echo "調用current():".current($arr);

10:          echo "<br>";

11:          echo "再次調用current():".current($arr);

12:          echo "<br>";

13:          echo "調用next():".next($arr);

14:          echo "<br>";

15:          echo "調用reset():".reset($arr);

16:          echo "<br>";

17:          echo "調用end():".end($arr);

18:          echo "<br>";

19:              echo "調用prev():".prev($arr);

20:        ?>

21:     </BODY>

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

 


  • 程豔秋 2018-01-08 19:36:11
    compact()函數用于將(jiāng)兩(liǎng)個或多個變量轉換爲數組,當然也包含數組變量。其參數是變量的名稱而非帶有$全名。相反的函數是extract()作用顧名思義就是將(jiāng)數組轉換爲單個的字符串,鍵值作爲其字符串名稱,數組值作爲字符串的值。
  • 甄丹丹 2018-01-09 15:56:26
    each()函數的一個重要性質,那就是當數組已經(jīng)到達末尾時each()函數返回false