PHP數(shù)組函數(shù)知識(shí)匯總
本文為大家分享了PHP數(shù)組函數(shù)基礎(chǔ)知識(shí),供大家參考,具體內(nèi)容如下
數(shù)組array是非常重要的數(shù)據(jù)類型。相對(duì)于其他的數(shù)據(jù)類型,它更像是一種結(jié)構(gòu),而這種結(jié)果構(gòu)可以存儲(chǔ)一系列數(shù)值。數(shù)組能夠在單一變量名中存儲(chǔ)許多值,并且能夠通過(guò)引用下標(biāo)號(hào)來(lái)訪問(wèn)某個(gè)值。
在 PHP 中,有三種數(shù)組類型:
索引數(shù)組 - 帶有數(shù)字索引的數(shù)組
關(guān)聯(lián)數(shù)組 - 帶有指定鍵的數(shù)組
多維數(shù)組 - 包含一個(gè)或多個(gè)數(shù)組的數(shù)組
一、創(chuàng)建數(shù)組
array(key => value)
1、創(chuàng)建索引數(shù)組
使用array()函數(shù)聲明數(shù)組。PHP屬于弱類型語(yǔ)言相對(duì)較靈活和方便,也可以直接是數(shù)組的元素值value,不需要鍵值key,索引是自動(dòng)分配的(索引從 0 開(kāi)始)。
例:
array("1" => "百度","2" => "阿里","3" => "騰訊");
或者是不使用鍵值:
array("百度","阿里","騰訊");
當(dāng)然也可以寫(xiě)成:
$arr[0] = "百度";
$arr[1] = "阿里";
$arr[2] = "騰訊";
2、創(chuàng)建關(guān)聯(lián)數(shù)組
關(guān)聯(lián)數(shù)組和索引數(shù)組類似,只是關(guān)聯(lián)數(shù)組不能夠像索引數(shù)組的鍵名那樣只能夠?yàn)閿?shù)字,它可以是數(shù)值和字符串以及混合形式,判斷一個(gè)數(shù)組是否為關(guān)聯(lián)數(shù)組的依據(jù)是:數(shù)組中的鍵名是否存在一個(gè)不是數(shù)字的。不是就是關(guān)聯(lián)。
array("李彥宏" => "百度","馬云" => "阿里","馬化騰" => "騰訊");
3、多維數(shù)組
array(array(),array()) 二維數(shù)組
獲得數(shù)組的長(zhǎng)度 - count() 函數(shù)
<?php
$arr = array("百度","阿里","騰訊");
echo count($arr);
?> //結(jié)果返回3(說(shuō)明數(shù)組中有三個(gè)元素)
二、遍歷數(shù)組
輸出數(shù)組中元素的值。對(duì)于索引數(shù)組常用for、foreach;對(duì)于關(guān)聯(lián)數(shù)組常用foreach。使用print_r()函數(shù)打印循環(huán)后的結(jié)果,也可以用var_dump()。
1、遍歷索引數(shù)組
遍歷并輸出索引數(shù)組的所有值,可以使用for、 foreach(array_expression as value)、foreach(arrayexpressionaskey => $value) 循環(huán),如下:
使用for循環(huán)
<?php
$arr = array("百度","阿里","騰訊");
$arrlen = count($arr);//獲取數(shù)組的長(zhǎng)度
for ($i=0; $i <$arrlen ; $i++) {
$data[] = $arr[$i];
}
echo "<pre>"; //換行顯示
print_r($data);
打印結(jié)果顯示如下:
Array
(
[0] => 百度
[1] => 阿里
[2] => 騰訊
)
使用foreach循環(huán)
<?php
$arr = array("百度","阿里","騰訊");
foreach ($arr as $value) {
$data[] = $value;
}
echo "<pre>"; //換行顯示
print_r($data);//打印結(jié)果和上面一樣
注意:data后面有一個(gè)數(shù)組符號(hào)[],為什么呢?
2、遍歷關(guān)聯(lián)數(shù)組
遍歷并輸出關(guān)聯(lián)數(shù)組的所有值,可以使用 foreach (array_expression as key=>value) 循環(huán),如下:
<?php
$arr = array("李彥宏" => "百度","馬云" => "阿里","馬化騰" => "騰訊");
foreach ($arr as $key => $value) {
$data[$key] = $value;
}
echo "<pre>"; //換行顯示
print_r($data);
打印結(jié)果顯示:
Array ( [李彥宏] => 百度 [馬云] => 阿里 [馬化騰] => 騰訊 )
注意到?jīng)]?此時(shí)的data后是[$key]?而不是[]
一個(gè)數(shù)關(guān)聯(lián)數(shù)組一個(gè)是數(shù)字索引數(shù)組,
三、增加刪除數(shù)組的元素
在數(shù)組元素的尾部增加
array_push(array,value1,value2…) 函數(shù)向第一個(gè)參數(shù)的數(shù)組尾部添加一個(gè)或多個(gè)元素(入棧),然后返回新數(shù)組的長(zhǎng)度。
該函數(shù)等于多次調(diào)用 array[]=value。
<?php
$arr = array("百度","阿里","騰訊");
array_push($arr,"知乎","微博");
echo "<pre>"; //換行顯示
print_r($arr);
//打印結(jié)果顯示:
Array
(
[0] => 百度
[1] => 阿里
[2] => 騰訊
[3] => 知乎
[4] => 微博
)
在數(shù)組元素的開(kāi)始增加
array_unshift(array,value1,value2,value3…) 函數(shù)用于向數(shù)組插入新元素。新數(shù)組的值將被插入到數(shù)組的開(kāi)頭。
<?php
$arr = array("百度","阿里","騰訊");
array_unshift($arr,"知乎","微博");
echo "<pre>"; //換行顯示
print_r($arr);
//打印結(jié)果顯示:
Array
(
[0] => 知乎
[1] => 微博
[2] => 百度
[3] => 阿里
[4] => 騰訊
)
在數(shù)組元素的尾部刪除
array_pop(array) 函數(shù)刪除數(shù)組中的最后一個(gè)元素。
<?php
$arr = array("百度","阿里","騰訊");
array_pop($arr);
echo "<pre>"; //換行顯示
print_r($arr);
打印結(jié)果顯示:
Array
(
[0] => 百度
[1] => 阿里
)
在數(shù)組元素的開(kāi)始刪除
array_shift(array) 函數(shù)刪除數(shù)組中第一個(gè)元素 并可以返回被刪除元素的值。
<?php
$arr = array("百度","阿里","騰訊");
array_shift($arr);
echo "<pre>"; //換行顯示
print_r($arr);
打印結(jié)果顯示:
Array
(
[0] => 阿里
[1] => 騰訊
)
移除數(shù)組中重復(fù)的值
array_unique(array) 函數(shù)移除數(shù)組中的重復(fù)的值,并返回結(jié)果數(shù)組。
<?php
$arr = array("百度","阿里","騰訊","百度","微博");
$data = array_unique($arr);
echo "<pre>";
print_r($data);
打印結(jié)果顯示:
Array
(
[0] => 百度
[1] => 阿里
[2] => 騰訊
[4] => 微博
)
四、定位數(shù)組元素
搜索數(shù)組中存在的值
in_array(search,array,type)檢查數(shù)組中是否存在指定的值。
如果給定的值 search 存在于數(shù)組 array 中則返回 true。如果第三個(gè)參數(shù)設(shè)置為 true,函數(shù)只有在元素存在于數(shù)組中且數(shù)據(jù)類型與給定值相同時(shí)才返回 true。如果沒(méi)有在數(shù)組中找到參數(shù),函數(shù)返回 false。
<?php
$arr = array("百度","阿里","騰訊");
while (in_array("百度", $arr)) {
echo "已經(jīng)找到";
break;
} //輸出已經(jīng)找到
在數(shù)組中根據(jù)條件取出一段值: array_slice(array,start,length,preserve)
start 必需。數(shù)值。規(guī)定取出元素的開(kāi)始位置。 0 = 第一個(gè)元素。
如果該值設(shè)置為正數(shù),則從前往后開(kāi)始取。
如果該值設(shè)置為負(fù)數(shù),則從后向前取 start 絕對(duì)值。 -2 意味著從數(shù)組的倒數(shù)第二個(gè)元素開(kāi)始。
length 可選。數(shù)值。規(guī)定被返回?cái)?shù)組的長(zhǎng)度。
如果該值設(shè)置為整數(shù),則返回該數(shù)量的元素。
如果該值設(shè)置為負(fù)數(shù),則函數(shù)將在舉例數(shù)組末端這么遠(yuǎn)的地方終止取出。
如果該值未設(shè)置,則返回從 start 參數(shù)設(shè)置的位置開(kāi)始直到數(shù)組末端的所有元素。
<?php
$arr = array("百度","阿里","騰訊","知乎","微博");
$data = array_slice($arr,0,4);
echo "<pre>";
print_r($data);
打印結(jié)果顯示:
Array
(
[0] => 百度
[1] => 阿里
[2] => 騰訊
[3] => 知乎
)
array_splice(array,start,length,array) 函數(shù)從數(shù)組中移除選定的元素,并用新元素取代它。該函數(shù)也將返回包含被移除元素的數(shù)組。
<?php
$arr1 = array("百度","阿里","騰訊");
$arr2 = array("知乎","微博");
array_splice($arr1,0,2,$arr2);
echo "<pre>";
print_r($arr1);
打印結(jié)果顯示:
Array
(
[0] => 知乎
[1] => 微博
[2] => 騰訊
)
五、數(shù)組合并、拆分、比較
array_merge()函數(shù)將數(shù)組合并到一起,返回一個(gè)聯(lián)合的數(shù)組。所得到的數(shù)組以第一個(gè)輸入數(shù)組參數(shù)開(kāi)始,按后面數(shù)組參數(shù)出現(xiàn)的順序依次追加。
<?php
$arr1 = array("百度","阿里","騰訊");
$arr2 = array("知乎","微博");
$data = array_merge($arr1,$arr2);
echo "<pre>";
print_r($data);
打印結(jié)果顯示:
Array
(
[0] => 百度
[1] => 阿里
[2] => 騰訊
[3] => 知乎
[4] => 微博
)
遞歸追加數(shù)組
array_merge_recursive()函數(shù)與array_merge()相同,可以將兩個(gè)或多個(gè)數(shù)組合并到一起,形成一個(gè)聯(lián)合的數(shù)組。兩者之間的區(qū)別在于,當(dāng)某個(gè)輸入數(shù)組中的某個(gè)鍵已經(jīng)存在于結(jié)果數(shù)組中時(shí)該函數(shù)會(huì)采取不同的處理方法。array_merge()會(huì)覆蓋前面存在的鍵/值對(duì),將其替換為當(dāng)前輸入數(shù)組中的鍵/值對(duì),而array_merge_recursive()將兩個(gè)值合并在一起,形成一個(gè)新的數(shù)組并以原有的鍵作為數(shù)組名。其形式為:
$arr= array('one'=>'C', 'one'=>'B');
$arr1= array('three'=>'1', 'one'=>'2');
$arr2= array_merge_recursive($arr, $arr1);
echo "<pre>";
print_r($arr2);
打印結(jié)果顯示:
Array
(
[one] => Array
(
[0] => B
[1] => 2
)
[three] => 1
)
合并兩個(gè)數(shù)組
array_combine()函數(shù)會(huì)生成一個(gè)新數(shù)組,這個(gè)數(shù)組由一組提交的鍵和對(duì)應(yīng)的值組成,其形式為:
$arr= array('A', 'B');
$arr1= array('1', '2');
$arr2= array_combine($arr, $arr1);
echo "<pre>";
print_r($arr2);
打印結(jié)果顯示:
Array
(
[A] => 1
[B] => 2
)
求數(shù)組的交集
array_intersect()函數(shù)返回一個(gè)保留了鍵的數(shù)組,這個(gè)數(shù)組只由第一個(gè)數(shù)組中出現(xiàn)的且在其他每個(gè)輸入數(shù)組中都出現(xiàn)的值組成。其形式如下:
$arr= array('A', 'B', 'C', 'D');
$arr1= array('A', 'B', 'E');
$arr2= array('A', 'F', 'D');
$arr3= array_intersect($arr, $arr1, $arr2);
echo "<pre>";
print_r($arr3);
打印結(jié)果顯示:
Array
(
[0] => A
)
注意:只有在兩個(gè)元素有相同的數(shù)據(jù)類型時(shí),array_intersect()才會(huì)認(rèn)為它們相等。
求關(guān)聯(lián)數(shù)組的交集
array_intersect_assoc()與array_intersect()基本相同,只不過(guò)它在比較中還考慮了數(shù)組的鍵。因此,只有在第一個(gè)數(shù)組中出現(xiàn),且在所有其他輸入數(shù)組中也出現(xiàn)的鍵/值對(duì)才被返回到結(jié)果數(shù)組中。其形式如下:
$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D');
$arr1= array('a'=>'A', 'c'=>'B', 'E');
$arr2= array('a'=>'A', 'b'=>'F', 'd'=>'B');
$arr3= array_intersect_assoc($arr, $arr1, $arr2);
echo "<pre>";
print_r($arr3);
打印結(jié)果顯示:
Array
(
[a] => A
)
求關(guān)聯(lián)數(shù)組的差集
函數(shù)array_diff_assoc()與array_diff()基本相同,只是它在比較時(shí)還考慮了數(shù)組的鍵,因此,只在第一個(gè)數(shù)組中出現(xiàn)而不在其他輸入數(shù)組中出現(xiàn)的鍵/值對(duì)才會(huì)被返回到結(jié)果數(shù)組中。其形式如下:
$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D');
$arr1= array('a'=>'A', 'b'=>'B', 'e'=>'E');
$arr3= array_diff_assoc($arr, $arr1);
echo "<pre>";
print_r($arr3);
打印結(jié)果顯示:
Array
(
[c] => C
[d] => D
)
其他有用的數(shù)組函數(shù)
返回一組隨機(jī)的鍵 array_rand()函數(shù)將返回?cái)?shù)組中的一個(gè)或多個(gè)鍵。其形式為:
$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D');
$arr1= array_rand($arr, 2);
echo "<pre>";
print_r($arr1);
打印結(jié)果顯示:
Array
(
[0] => c
[1] => d
) //每次刷新顯示的結(jié)果都不一樣
對(duì)數(shù)組中的值求和
array_sum()函數(shù)將數(shù)組內(nèi)的所有值加在一起,返回最終的和,其形式如下:
$arr= array('A', 32, 12, 'B');
$count= array_sum($arr);
echo "<pre>";
print_r($count);
打印結(jié)果顯示:
44
如果數(shù)組中包含其他數(shù)據(jù)類型(例如字符串),這些值將被忽略。
劃分?jǐn)?shù)組
array_chunk()函數(shù)將數(shù)組分解為一個(gè)多維數(shù)組,這個(gè)多維數(shù)組由多個(gè)包含size個(gè)元素的數(shù)組所組成。其形式如下:
$arr= array('A', 'B', 'C', 'D');
$arr1= array_chunk($arr, 2);
echo "<pre>";
print_r($arr1);
打印結(jié)果顯示:
Array
(
[0] => Array
(
[0] => A
[1] => B
)
[1] => Array
(
[0] => C
[1] => D
)
)
處理數(shù)組時(shí)可調(diào)用函數(shù)有
array_filter(*array*,*callbackfunction*); array_intersect_uassoc(*array1*,*array2*,*array3*...,*myfunction*) array_intersect_ukey(*array1*,*array2*,*array3*...,*myfunction*) array_reduce(*array*,*myfunction*,*initial*) array_walk(*array*,*myfunction*,*userdata*...) ……
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)php程序設(shè)計(jì)有所幫助。
相關(guān)文章
php實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法
這篇文章主要介紹了php實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法,涉及php操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
解析在PHP中使用mysqli擴(kuò)展庫(kù)對(duì)mysql的操作
本篇文章是對(duì)在PHP中使用mysqli擴(kuò)展庫(kù)對(duì)mysql的操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07
PHP數(shù)據(jù)源架構(gòu)模式之表入口模式實(shí)例分析
這篇文章主要介紹了PHP數(shù)據(jù)源架構(gòu)模式之表入口模式,結(jié)合實(shí)例形式分析了PHP表入口模式的相關(guān)概念、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-01-01
PHP查找數(shù)組中只出現(xiàn)一次的數(shù)字實(shí)現(xiàn)方法【查找特定元素】
這篇文章主要介紹了PHP查找數(shù)組中只出現(xiàn)一次的數(shù)字實(shí)現(xiàn)方法,涉及php使用array_count_values針對(duì)數(shù)組元素進(jìn)行統(tǒng)計(jì)的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
PHP貪婪算法解決0-1背包問(wèn)題實(shí)例分析
這篇文章主要介紹了PHP貪婪算法解決0-1背包問(wèn)題,實(shí)例分析了貪婪算法的原理與背包問(wèn)題的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-03-03

