這篇文章主要介紹了關於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中文網其他相關文章!

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3漢化版
中文版,非常好用

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。