php的數組與資料結構

來源:互聯網
上載者:User

標籤:程式設計語言   var   附加   種類   sum   計數   splice   控制   導致   

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():在數組開頭插入一個或多個單元

php的數組與資料結構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.