PHP數(shù)組總結(jié)

一、數(shù)組操作的基本函數(shù)

數(shù)組的鍵名和值

array_values($arr);獲得數(shù)組的值,返回含所有值的索引數(shù)組

array_keys($arr);獲得數(shù)組的鍵名

array array_keys ( array $array [, mixed $search_value [, bool $strict = false ]] )
//如果指定了可選參數(shù) search_value,則只返回該值的鍵名。
//否則 input 數(shù)組中的所有鍵名都會(huì)被返回。

array_flip($arr);數(shù)組中的值與鍵名互換(如果有重復(fù)前面的會(huì)被后面的覆蓋)

in_array($needle,$arr);在數(shù)組中檢索apple,如果 needle 是字符串,則比較是區(qū)分大小寫的。

array_search($needle,$haystack);在數(shù)組中檢索apple ,如果存在返回鍵名,如果 needle 在 haystack 中出現(xiàn)不止一次,則返回第一個(gè)匹配的鍵。要返回所有匹配值的鍵,應(yīng)該用 array_keys() 加上可選參數(shù) search_value 來(lái)代替。

array_key_exists("apple",$arr);檢索給定的鍵名是否存在數(shù)組中

isset($arr[apple]):檢索給定的鍵名是否存在數(shù)組中

//isset() 對(duì)于數(shù)組中為 NULL 的值不會(huì)返回 TRUE,而 array_key_exists() 會(huì)
$search_array = array('first' => null, 'second' => 4);

// returns false
isset($search_array['first']);

// returns true
array_key_exists('first', $search_array);

數(shù)組的內(nèi)部指針

current($arr);返回?cái)?shù)組中的當(dāng)前單元

pos($arr);返回?cái)?shù)組中的當(dāng)前單元

key($arr);返回?cái)?shù)組中當(dāng)前單元的鍵名

prev($arr);將數(shù)組中的內(nèi)部指針倒回一位

next($arr);將數(shù)組中的內(nèi)部指針向前移動(dòng)一位

end($arr);將數(shù)組中的內(nèi)部指針指向最后一個(gè)單元

reset($arr;將數(shù)組中的內(nèi)部指針指向第一個(gè)單元

each($arr);將返回?cái)?shù)組當(dāng)前元素的一個(gè)鍵名/值的構(gòu)造數(shù)組,并使數(shù)組指針向前移動(dòng)一位

數(shù)組和變量之間的轉(zhuǎn)換

list($key,$value)=each($arr);獲得數(shù)組當(dāng)前元素的鍵名和值

extract($arr);用于把數(shù)組中的元素轉(zhuǎn)換成變量導(dǎo)入到當(dāng)前文件中,鍵名當(dāng)作變量名,值作為變量值

int extract ( array &$var_array [, int $extract_type = EXTR_OVERWRITE [, string $prefix = NULL ]] )

//示例
/* 假定 $var_array 是 wddx_deserialize 返回的數(shù)組*/

$size = "large";
$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $size, $shape, $wddx_size\n";

//輸出
//blue, large, sphere, medium

//$size 沒(méi)有被覆蓋,因?yàn)橹付?EXTR_PREFIX_SAME,這使得 $wddx_size 被建立。
//如果指定了 EXTR_SKIP,則 $wddx_size 也不會(huì)被建立。
//EXTR_OVERWRITE 將使 $size 的值為“medium”,EXTR_PREFIX_ALL 將建立新變量 $wddx_color,$wddx_size 和 $wddx_shape。

compact(var1,var2,var3);用給定的變量名創(chuàng)建一個(gè)數(shù)組,其作用剛好跟extract相反。要特別注意的一點(diǎn)是,當(dāng)函數(shù)指定的變量不存在時(shí),函數(shù)不會(huì)產(chǎn)生任何錯(cuò)誤。

二、數(shù)組的分段和填充

數(shù)組的分段

array_slice($arr,0,3);可以將數(shù)組中的一段取出

array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )

//注意 array_slice() 默認(rèn)會(huì)重新排序并重置數(shù)組的數(shù)字索引。你可以通過(guò)將 preserve_keys 設(shè)為 TRUE 來(lái)改變此行為。

array_splice($arr,0,3,array("black","maroon"));可以將數(shù)組中的一段取出,與上個(gè)函數(shù)不同在于返回的序列從原數(shù)組中刪除

array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement ]] )

//把 input 數(shù)組中由 offset 和 length 指定的單元去掉,如果提供了 replacement 參數(shù),則用其中的單元取代。

//注意 input 中的數(shù)字鍵名不被保留。

分割多個(gè)數(shù)組

array_chunk($arr,3,TRUE);可以將一個(gè)數(shù)組分割成多個(gè),TRUE為保留原數(shù)組的鍵名

數(shù)組的填充

array_pad($arr,5,'x');將一個(gè)數(shù)組填補(bǔ)到制定長(zhǎng)度

三、數(shù)組與棧

array_push($arr,"apple","pear");將一個(gè)或多個(gè)元素壓入數(shù)組棧的末尾(入棧),返回入棧元素的個(gè)數(shù)

array_pop($arr);將數(shù)組棧的最后一個(gè)元素彈出(出棧)

四、數(shù)組與列隊(duì)

array_shift($arr);數(shù)組中的第一個(gè)元素移出并作為結(jié)果返回(數(shù)組長(zhǎng)度減1,其他元素向前移動(dòng)一位,數(shù)字鍵名改為從零技術(shù),文字鍵名不變)

array_unshift($arr,"a",array(1,2));在數(shù)組的開頭插入一個(gè)或多個(gè)元素

五、回調(diào)函數(shù)

array_walk($arr,'function','words');使用用戶函數(shù)對(duì)數(shù)組中的每個(gè)成員進(jìn)行處理(第三個(gè)參數(shù)傳遞給回調(diào)函數(shù)function)

array_map("function",$arr1,$arr2);可以處理多個(gè)數(shù)組(當(dāng)使用兩個(gè)或更多數(shù)組時(shí),他們的長(zhǎng)度應(yīng)該相同)

array_filter($arr,"function");使用回調(diào)函數(shù)過(guò)濾數(shù)組中的每個(gè)元素,如果回調(diào)函數(shù)為TRUE,數(shù)組的當(dāng)前元素會(huì)被包含在返回的結(jié)果數(shù)組中,數(shù)組的鍵名保留不變

function odd($var)
{
    // returns whether the input integer is odd
    return($var & 1);
}

function even($var)
{
    // returns whether the input integer is even
    return(!($var & 1));
}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));

array_reduce($arr,"function","");轉(zhuǎn)化為單值函數(shù)(為數(shù)組的第一個(gè)值)

六、數(shù)組的排序

通過(guò)元素值對(duì)數(shù)組排序

sort($arr);由小到大的順序排序(第二個(gè)參數(shù)為按什么方式排序)忽略鍵名的數(shù)組排序

rsort($arr);由大到小的順序排序(第二個(gè)參數(shù)為按什么方式排序)忽略鍵名的數(shù)組排序

asort($arr);由小到大的順序排序(第二個(gè)參數(shù)為按什么方式排序)保留鍵名的數(shù)組排序

arsort($arr);由大到小的順序排序(第二個(gè)參數(shù)為按什么方式排序)保留鍵名的數(shù)組排序

usort($arr,"function");使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序(function中有兩個(gè)參數(shù),0表示相等,正數(shù)表示第一個(gè)大于第二個(gè),負(fù)數(shù)表示第一個(gè)小于第二個(gè))忽略鍵名的數(shù)組排序

uasort($arr,"function");使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序(function中有兩個(gè)參數(shù),0表示相等,正數(shù)表示第一個(gè)大于第二個(gè),負(fù)數(shù)表示第一個(gè)小于第二個(gè))保留鍵名的數(shù)組排序

通過(guò)鍵名對(duì)數(shù)組排序

ksort($arr);按照鍵名正序排序

krsort($arr);按照鍵名逆序排序

uksort($arr,"function");使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的鍵名進(jìn)行排序(function中有兩個(gè)參數(shù),0表示相等,正數(shù)表示第一個(gè)大于第二個(gè),負(fù)數(shù)表示第一個(gè)小于第二個(gè))

自然排序法排序

natsort($arr);自然排序(忽略鍵名)

natcasesort($arr);自然排序(忽略大小寫,忽略鍵名)

七、數(shù)組的計(jì)算

數(shù)組元素的求和

array_sum($arr);對(duì)數(shù)組內(nèi)部的所有元素做求和運(yùn)算

數(shù)組的合并

array_merge($arr1,$arr2);合并兩個(gè)或多個(gè)數(shù)組(相同的字符串鍵名,后面的覆蓋前面的,相同的數(shù)字鍵名,后面的不會(huì)做覆蓋操作,而是附加到后面)

array_merge_recursive($arr1,$arr2); 遞歸合并操作,如果數(shù)組中有相同的字符串鍵名,這些值將被合并到一個(gè)數(shù)組中去。如果一個(gè)值本身是一個(gè)數(shù)組,將按照相應(yīng)的鍵名把它合并為另一個(gè)數(shù)組。當(dāng)數(shù)組 具有相同的數(shù)組鍵名時(shí),后一個(gè)值將不會(huì)覆蓋原來(lái)的值,而是附加到后面

數(shù)組的差集

array_diff($arr1,$arr2);返回差集結(jié)果數(shù)組,對(duì)比返回在 array1 中但是不在 array2 及任何其它參數(shù)數(shù)組中的值。

array_diff_assoc($arr1,$arr2,$arr3);返回差集結(jié)果數(shù)組,鍵名也做比較

數(shù)組的交集

array_intersect($arr1,$arr2);返回交集結(jié)果數(shù)組,array_intersect() 返回一個(gè)數(shù)組,該數(shù)組包含了所有在 array1 中也同時(shí)出現(xiàn)在所有其它參數(shù)數(shù)組中的值。注意鍵名保留不變。

array_intersect_assoc($arr1,$arr2);返回交集結(jié)果數(shù)組,鍵名也做比較

八、其他的數(shù)組函數(shù)

range(0,12);創(chuàng)建一個(gè)包含指定范圍單元的數(shù)組

array_unique($arr);移除數(shù)組中重復(fù)的值,新的數(shù)組中會(huì)保留原始的鍵名

array_reverse($arr,TRUE);返回一個(gè)單元順序與原數(shù)組相反的數(shù)組,如果第二個(gè)參數(shù)為TRUE保留原來(lái)的鍵名

array_rand($arr,2);從數(shù)組中隨機(jī)取出一個(gè)或 多個(gè)元素

shuffle($arr);將數(shù)組的順序打亂


PHP 中的數(shù)組實(shí)際上是一個(gè)有序映射。映射是一種把 values 關(guān)聯(lián)到 keys 的類型。此類型在很多方面做了優(yōu)化,因此可以把它當(dāng)成真正的數(shù)組,或列表(向量),散列表(是映射的一種實(shí)現(xiàn)),字典,集合,棧,隊(duì)列以及更多可能性。由于數(shù)組元素的值也可以是另一個(gè)數(shù)組,樹形結(jié)構(gòu)和多維數(shù)組也是允許的。
在PHP中數(shù)組分為兩類: 數(shù)字索引數(shù)組和關(guān)聯(lián)數(shù)組。
其中數(shù)字索引數(shù)組和C語(yǔ)言中的數(shù)組一樣,下標(biāo)是為0,1,2…
而關(guān)聯(lián)數(shù)組下標(biāo)可能是任意類型,與其它語(yǔ)言中的hash,map等結(jié)構(gòu)相似。

下面介紹PHP中遍歷關(guān)聯(lián)數(shù)組的三種方法:

方法1:foreach

<?php 
$sports = array( 
'football' => 'good', 
'swimming' => 'very well', 
'running' => 'not good'); 
foreach ($sports as $key => $value) { 
echo $key.": ".$value."<br />"; 
?>

//輸出結(jié)果:

football: good 
swimming: very well 
running: not good

方法2:each

<?php 
$sports = array( 
'football' => 'good', 
'swimming' => 'very well', 
'running' => 'not good'); 
while ($elem = each($sports)) { 
echo $elem['key'].": ".$elem['value']."<br />"; 
?>

方法3:list & each

<?php 
$sports = array( 
'football' => 'good', 
'swimming' => 'very well', 
'running' => 'not good'); 
while (list($key, $value) = each($sports)) { 
echo $key.": ".$value."<br />"; 
?>

參考網(wǎng)站

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PHP數(shù)組常用函數(shù)分類整理 一、數(shù)組操作的基本函數(shù) 數(shù)組的鍵名和值 array_values($arr); 獲得數(shù)...
    衡阿大閱讀 322評(píng)論 0 4
  • 由于最近都在freecodecamp上刷代碼,運(yùn)用了很多JavaScript數(shù)組的方法,因此做了一份關(guān)于JavaS...
    2bc5f46e925b閱讀 2,189評(píng)論 0 16
  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解包。 uni...
    思?jí)鬚HP閱讀 2,135評(píng)論 1 24
  • 如何控制alert中的換行?\n alert(“p\np”); 請(qǐng)編寫一個(gè)JavaScript函數(shù) parseQu...
    heyunqiang99閱讀 1,149評(píng)論 0 6
  • 我無(wú)數(shù)次地幻想自己是公主,可是沒(méi)有公主命。而動(dòng)畫里的灰姑娘是多么善良,她有水晶鞋的秘密武器,也有桃花女神的眷顧。...
    妃霧閱讀 637評(píng)論 4 4

友情鏈接更多精彩內(nèi)容