之前研究了一下python的幾種重要的數(shù)組,今天來溫習(xí)一下PHP的數(shù)組
數(shù)組的創(chuàng)建
-
使用array()函數(shù)創(chuàng)建
$A = array(); $A = array('a','b','c'); $A = array( 'first' => 'a', 'second' => 'b', 'third' => 'c' )
-
使用中括號[ ]創(chuàng)建(php5.4及之后版本支持潦嘶,其實大家現(xiàn)在學(xué)都直接用php7了)
$A = []; $A = ['a','b','c']; $A = [ 'first' => 'a', 'second' => 'b', 'third' => 'c' ]
兩種索引方式讀取或更改值
-
數(shù)字索引訪問(默認(rèn)索引)
數(shù)字索引從0開始
不支持負(fù)數(shù)倒序索引,越界訪問得到NULL(空)
echo $A[1] $A[1] = 'apple'
-
key值訪問(自定義索引殖告,可以是任意整數(shù)溜徙,也可以字符串)
用不存在的key值索引訪問內(nèi)容時得到NULL, 賦值時會以該索引新增一個元素
echo $A['first']; $A['first'] = 'apple'; $A[-5] = 'new_element';
ps:php的數(shù)組可以混合使用數(shù)字或字符串作為索引枪萄,使用字符串?dāng)?shù)字和整數(shù)沒有區(qū)別伶选。并且史飞,沒有主動為元素定義索引時,默認(rèn)為當(dāng)前數(shù)組中最大的非負(fù)整數(shù)索引+1(沒有非負(fù)整數(shù)索引時仰税,則為0)祸憋。使用
foreach 數(shù)組 AS 代表鍵=>代表值
可以遍歷數(shù)組,當(dāng)然肖卧,AS后邊可以只有代表值蚯窥。
增加或刪除元素
-
增加元素
-
直接賦值
$A[] = 'new_element'; //向數(shù)組A的末尾添加一個元素'new_element'(其索引為默認(rèn)) $A['new_key'] = 'new_element'; //帶有新索引的直接賦值
-
array_push(array,new_element)
入棧/隊array_push($A塞帐,'new_element1','new_element2') //向數(shù)組$A末尾添加一個或多個元素
-
-
array_pad(數(shù)組拦赠,返回的數(shù)組長度,原數(shù)組長度不足時填充的內(nèi)容)
該函數(shù)不算真正意義上的增加元素葵姥,它不會改變原數(shù)組的內(nèi)容荷鼠,只是以原數(shù)組為基礎(chǔ)構(gòu)建指定長度的數(shù)組,當(dāng)原數(shù)組長度不足時用指定的參數(shù)補(bǔ)齊榔幸,當(dāng)指定的長度小于原數(shù)組時允乐,不會截短原數(shù)組。(指定的長度為負(fù)數(shù)時削咆,新元素被放到原數(shù)組的前面牍疏,為正數(shù)時放到后面,取絕對值作為長度)
-
刪除元素
-
array_shift(array)
出隊$head_element = array_shift($A); //從數(shù)組$A頭部移除一個元素并且返回
-
array_pop(array)
出棧$rear_element = array_pop($A); //從數(shù)組$A尾部移除一個元素并返回
使用unset()刪除拨齐,只能刪除特定的一個元素鳞陨,刪除后其他元素不會有任何改變
-
使用array_splice()刪除,刪除后更改所有以整數(shù)(包括字符串整數(shù))為索引元素的索引(按照默認(rèn)索引方式為這些元素重新索引)瞻惋,該函數(shù)會返回被刪除的元素構(gòu)成的數(shù)組(被刪除的元素為字符串索引會保留原索引厦滤,否則給予默認(rèn)索引)。如果需要歼狼,還可以用指定元素替換所有被刪除的元素(原索引不保留掏导,替換進(jìn)去的元素給予默認(rèn)索引)例子如下:
array_splice(數(shù)組 , 刪除的起始位置n , 刪除的個數(shù) ,[用于替換的元素]) // 第四個參數(shù)可選 起始位置n不是索引號羽峰,而是從第n+1個(包括)元素開始刪除 $A = ['2'=>'a','first'=>'b','7'=>'c','d']; print_r(array_splice($A,1,1)); print_r($A); 結(jié)果: Array ( [first] => b ) Array ( [0] => a [1] => c [2] => d )
還有一個函數(shù)array_slice()趟咆,使用方法同array_splice添瓷,但該函數(shù)不會刪除原數(shù)組中的值,只是取出部分值構(gòu)成新的數(shù)組忍啸,第四個參數(shù)是選擇新數(shù)組是否保留原索引 (默認(rèn)重置索引)
array_slice(數(shù)組 , 提取的起始位置n , 提取的個數(shù) ,[是否保留原索引]) // 第四個參數(shù)可選 $A = ['2'=>'a','first'=>'b','7'=>'c','d']; print_r(array_splice($A,0,3)); print_r($A); 結(jié)果: Array ( [0] => a [first] => b [1] => c ) //若第四個參數(shù)為true履植,則結(jié)果Array ( [2] => a [first] => b [7] => c ) Array ( [2] => a [first] => b [7] => c [8] => d ) // 原數(shù)組不被刪除
-
總結(jié)
? 一般使用array_shift(), array_pop()和$A[] = (直接賦值)的方法就能完成隊列和棧結(jié)構(gòu)计雌,不使用array_push的原因是直接賦值效率更高,在一次需要插入多個值時才考慮array_push玫霎。另外像php這種弱類型語言凿滤,數(shù)組的元素可以是任何而類型(包括數(shù)組),靈活性很強(qiáng)