首頁  >  文章  >  後端開發  >  php的陣列與資料結構

php的陣列與資料結構

不言
不言原創
2018-07-06 09:20:181704瀏覽

這篇文章主要介紹了關於php的陣列與資料結構,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

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

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

(一)數組的定義
1、直接賦值的方式宣告數組
    在變數名稱後面透過方括號「[]」中使用數字宣告索引數組,使用字串聲明關聯數組。
    $陣列變數名稱[索引值]=資料內容             //其中索引值(下標)可為字串或整數
    宣告陣列變數時,仍可在下標中使用字串或整數
    宣告陣列變數時,仍可在下標中使用數位與字串的方式。但對一維數組來說這種方式很少使用
    $contact[0]=1
    $contact[“id”]=1
    $contact[1]="A公司"
    $contact["公司"]="A公司"
    在上段程式碼中宣告了一個陣列$contact,其中下標使用數字和字串混合的方式。這樣既可以使用索引方式訪問,也可以使用關聯方式存取。
    宣告索引數組時,如果索引值是遞增的可以不在方括號內指定索引值,預設從0開始依序增加。在php中索引數組的下標值可以是非連續的,只要在初始化時指定非連續的下標值即可。
    $contact[]=1;                                //指定非連續的下標為14
    $contact[]= "A公司";                   //與最高的下標值並加1後的下標為15
    $con為14的元素重新賦值
    $contact[ ]="php";               地   //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($cont   > 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 — HTTPO. COOKIE提交至腳本的變量,不值得信任
    -->$_FILES — HTTP 文件上傳變數
    -->$_SESSION — Session 變數
 IE --> http cookie提交至腳本的變數

 (四)陣列的相關處理函數
#1、陣列的鍵值操作函數
c):數組中所有的值
    -->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中文網!

相關推薦:

PHP中把陣列中的值賦給一組變數的方法

PHP後台評論的實作

以上是php的陣列與資料結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn