php的數組與數據結構


php編程中30%的地方會用到數組,可見php數組的重要性。

php中的數組
數組概述--- php是弱類型語言,故數組可存放任意多個,任意類型的數據,且可實現堆,棧,隊列等數據結構的功能。數組容量可根據元素個數自動調整。

分類
      索引數組---下標是整數,類似大多數語言中的數組。
      關聯數組---下標是無序不重復的key,映射到對應的value。

(一)數組的定義
1、直接賦值的方式聲明數組
    在變量名后面通過方括號“[]”中使用數字聲明索引數組,使用字符串聲明關聯數組。
    $數組變量名[索引值]=資料內容             //其中索引值(下標)可以是一個字符串或整數
    在聲明數組變量時,還可以在下標中使用數字和字符串混合的方式。但對一維數組來說這種方式很少使用
    $contact[0]=1
    $contact[“id”]=1
    $contact[1]="A公司"
    $contact["公司"]="A公司"
    在上段代碼中聲明了一個數組$contact,其中下標中使用數字和字符串混合的方式。這樣既可以使用索引方式訪問,也可以使用關聯方式訪問。
    聲明索引數組時,如果索引值是遞增的可以不在方括號內指定索引值,默認從0開始依次增加。在php中索引數組的下標值可以是非連續的,只要在初始化時指定非連續的下標值即可。
    $contact[]=1;                            //默認的下標為0
    $contact[14]=“高某”;                 //指定非連續的下標為14
    $contact[]="A公司";                   //緊跟最高的下標值並加1后的下標為15
    $contact[14]=110;                     //下標為14的元素重新賦值
    $contact[]="php";                      //還是緊跟最高的下標值並加1后的下標為16
    print_r($contact);                      //Array ( [0] => 1 [14] => 110 [15] => A公司 [16] => php )
 
2、使用array()語言結構聲明數組
    可以用 array() 語言結構來新建一個 array。它接受任意數量用逗號分隔的 鍵(key) => 值(value) 對。
    $數組變量名=array(key1=>value1,key2=>value2,...,keyN=>valueN,)  // 鍵(key) 可是是一個 整數或字符串值(value) 可以是任意類型的值
     如果不使用=>指定下標默認為索引數組,索引值默認從0開始依次增加。如果使用array()語言結構聲明數組時不希望使用默認的索引值,可以使用=>運算符指定非連續的索引值。代碼如下
    $contact=array(1,14=>“高某”,A公司,14=>110,php);
    print_r($contact);                      //Array ( [0] => 1 [14] => 110 [15] => A公司 [16] => php )
    注:應該始終在用字符串表示的數組索引上加上引號。例如用 $foo['bar'] 而不是 $foo[bar]。但這並不意味着總是給鍵名加上引號。用不着給鍵名為常量或變量的加上引號,否則會使 PHP 不能解析它們。
(二)遍歷數組
1、使用for語句循環遍歷數組
    使用for語句遍歷數組,要求數組的下標必須是連續的數字索引,而在php中不僅可以指定非連續的數字索引值,還存在以字符串為下標的關聯數組,所以在php中很少使用for語句循環遍歷數組。

2、使用foreach語句循環遍歷數組
    foreach 語法結構提供了遍歷數組的簡單方式。 foreach 僅能夠應用於數組和對象(php5起支持遍歷對象),如果嘗試應用於其他數據類型的變量,或者未初始化的變量,將導致錯誤。有兩種語法:
     foreach (array_expression as $value){
        第一種
    }
    foreach (array_expression as $key => $value){
        第二種
    }
    更多關於foreach的介紹參加php官方手冊

3、聯合使用list()、each()和while循環遍歷數組
    each()--返回 array 數組中當前指針位置的鍵/值對並向前移動數組指針。在執行 each() 之后,數組指針將停留在數組中的下一個單元或者當碰到數組結尾時停留在最后一個單元。如果要再用 each 遍歷數組,必須使用 reset()。
    list()--把數組中的值賦給一些變量。像 array() 一樣,這不是真正的函數,而是語言結構。 list() 用一步操作給一組變量進行賦值。list()僅能用於數字索引的數組並且假定數字索引從0開始。
      補充說明:
        each()每次讀取一個元素將之拼裝為數組返回,沒有元素時返回false。返回的數組鍵名為0,1,key,value,其中0和key相等,1和value值相等。
        list(),語法古怪,僅用於數字索引數組,並假設索引從0開始。list(,,var)=array;
        while(list(key,value) = each($array)){}

4、使用數組的內部指針控制函數遍歷數組
    對於數組指針的控制,php提供了幾個內建函數:
    -->current() - 取得目前指針位置的內容資料
    -->key() -  取得目前指針位置的索引值
    -->prev() - 將數組的內部指針倒回一位
    -->next() - 將數組中的內部指針向前移動一位
    -->end() - 將數組的內部指針指向最后一個單元
    -->reset() - 將數組的內部指針指向第一個單元

(三)預定義數組
    從php4.1.0開始,php提供了一套附加的預定義數組,這些數組變量包含了來自web服務器、客戶端、運行環境和用戶輸入的數據。它們在全局范圍內自動生效,因此通常被稱為自動全局變量或超全局變量。在php中用戶不能自定義超全局變量,所以在自定義變量時應避免和預定的全局變量同名。常用的全局數組如下
    -->$GLOBALS — 引用全局作用域中可用的全部變量
    -->$_SERVER — 服務器和執行環境信息
    -->$_ENV — 環境變量
    -->$_GET — HTTP GET 變量
    -->$_POST — HTTP POST 變量
    -->$_REQUEST — HTTP Request 變量,由GET,POST.COOKIE提交至腳本的變量,不值得信任
    -->$_FILES — HTTP 文件上傳變量
    -->$_SESSION — Session 變量
    -->$_COOKIE — HTTP Cookies,經由http cookie提交至腳本的變量

 (四)數組的相關處理函數
1、數組的鍵值操作函數
    -->array_values():返回數組中所有的值
    -->array_keys():返回數組中所有的鍵名
    -->in_array():檢查數組中是否存在某值,即在數組中搜索給定的值。也可用array_search()。
    -->array_key_exits():檢查給定的鍵名或索引是否存在於數組
    -->array_flip():交換數組中的鍵和值然后返回交換后的數組。如果一個值存在多次則最有一個鍵名作為它的值覆蓋前面的值
    -->array_reverse():將數組中的元素順序翻轉,創建新的數組並返回。也就是將數組元素倒序排列。

2、統計數組元素的個數和唯一性
    -->count():計算數組中的元素數目或對象中的屬性個數
    -->array_count_values():統計數組中所有值出現的次數
    -->array_unique():刪除數組中重復的值並返回新的數組

3、使用回調函數處理數組的函數
    -->array_filter():用回調函數過濾數組中的元素,返回按用戶自定義函數過濾后的新數組
    -->array_walk():對數組中的每個元素應用回調函數處理,成功返回TRUE否則返回FALSE
    -->array_map():將回調函數作用到給定數組的元素上(可處理多個數組),返回用戶自定義函數作用后的數組
    -->array_filter():用回調函數過濾數組中的元素,返回按用戶自定義函數過濾后的新數組
    -->array_filter():用回調函數過濾數組中的元素,返回按用戶自定義函數過濾后的新數組

4、數組的排序函數


5、拆分、合並、分解和結合數組
    -->array_slice():在數組中根據條件取出一段值並返回
    -->array_splice():在數組中根據條件選中一段值刪除它們或用其它值替換
    -->array_combine():創建一個數組,用一個數組的值作為其鍵名,另一個數組的值作為其值
    -->array_merge():合並一個或多個數組
    -->array_intersect():計算數組的交集
    -->array_diff():計算數組的差集
    -->array_slice():在數組中根據條件取出一段值並返回

6、其它常用函數
    -->array_rand():從數組中隨機取出一個或多個元素
    -->shuffle():將數組中元素順序打亂
    -->array_sum():計算數組中所有值的和
    -->range():建立一個包含指定范圍單元的數組

 (五)數組與數據結構
    在強類型編程語言中,有專用的數據結構解決方案。通常是創建一個容器,在這個容器中可以存儲任意類型的數據,並且可以根據容器中存儲的數據決定容器的容量,打到可以變長的容器結構,比如鏈表、堆棧和隊列等都是數據結構中常用的形式。在PHP中,通常都是使用數組來完成其它語言使用數據結構才能完成的工作。它是若類型語言,在同一個數組中就可以存儲多種類型的數據,而且php中的數組沒有長度限制,數組存儲數據的容量還可以根據里面元素個數的增減自動調整。
1、使用數組實現堆棧
    堆棧是數據結構的一種實現形式,數據存儲時采用“先進后出”的數據結構。在php中,將數組當作一個棧使用array_push()和array_pop()兩個函數即可完成數據的進棧和出棧操作。
    -->array_push():將一個或多個單元壓入數組末尾(入棧),然后返回新組的長度。
    -->array_pop():將數組最有一個單元彈出數組(出棧)
2、使用數組實現隊列
     隊列是數據結構的一種實現形式,數據存儲時采用“先進先出”的數據結構。在php中,將數組當作一個棧使用array_push()和array_shift()兩個函數即可完成數據的隊列操作。
        -->array_shift():將數組開頭的單元移出數組,然后返回被刪元素值。
        -->array_shift():在數組開頭插入一個或多個單元


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM