大家不要吐槽我寫的亂,其實是簡書的markdown編輯器有問題,看內容感覺寫的很亂。我聯系過簡書的技術人員,連我理都不理一下。大家不妨去看原文。格式清晰,頁面右側還有導航目錄(僅限PC端頁面)。
原文鏈接:原文也是我的
前言概述
PHP中擁有大量的數組處理函數。PHP語言本身就有大量的函數,又多又雜。
PHP中可以將數組分為一維數組、二維數組、和多維數組。也可以根據數組鍵名分為數字索引數組(indexed array)和關聯數組(associative array)
1.數字索引數組(indexed array)
數字索引數組,使用數字(一般是整數)作為鍵名,默認從0開始。也可以指定從某個具體位置開始保存數據。
如果鍵名既有數字又有字符串,則是關聯數組
2.關聯數組(associative array)
關聯數組,鍵名是字符串,或字符串與數字混合形式。
只要鍵名中有一個不是數字,則該數組就是關聯數組
創建二維數組
創建一維數組較為簡單,故略去
數組元素本身仍是數組的數組就是二維數組;二維數組的使用和定義與一維數組相同,區別在于二維數組的元素仍然是數字。
由數組標識符"[]"創建二維數組
不多說廢話,直接上源碼
<?php
$arr[1]=array("PHP入門","PHP模塊","PHP教程"); //定義了一個數字索引型的二維數組
$arr["JAVA圖書"]=array("a"=>"JAVA手冊",“b”=>"JAVA寶典"); //定義了一個關聯二維數組
print_r($arr); //print_r()函數可以按照鍵值順序輸出數組中的值。對于非數組則輸出本身
?>
由array()函數創建二維數組
<?php
$str = array(
"PHP圖書"=>array("PHP入門","PHP模塊",“PHP教程”),
"JAVA圖書"=>array("a"=>"JAVA范例","b"=>"JAVA寶典";
"ASP圖書"=>array("ASP入精",2+>"ASP范例","ASP模塊");
);
print_r($str);
?>
遍歷輸出數組
foreach遍歷數組
據說foreach是PHP中專門用來遍歷數組的。
在PHP中foreach循環語句,常用于遍歷數組,一般有兩種使用方式:不取下標、取下標。
(1)只取值,不取下標
<?php
foreach (數組 as 值){
//執行的任務
}
?>
(2)同時取下標和值
<?php
foreach (數組 as 下標 => 值){
//執行的任務
}
?>
列出所有學生姓名!
有一組以學號為下標,姓名為值的數組,這時候需要遍歷數組的姓名。
<?php
$students = array(
'2010'=>'令狐沖',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向問天',
'2015'=>'任我行',
'2016'=>'沖虛',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'寧中則',
);//10個學生的學號和姓名,用數組存儲
//使用循環結構遍歷數組,獲取學號和姓名
foreach($students as $v){
echo $v;//輸出(打印)姓名
echo "<br />";
}
?>
//執行后只會輸出學生姓名
列出所有學生學號和姓名!
有時候需要同時列出學號和姓名。
<?php
$students = array(
'2010'=>'令狐沖',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向問天',
'2015'=>'任我行',
'2016'=>'沖虛',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'寧中則',
);//10個學生的學號和姓名,用數組存儲
//使用循環結構遍歷數組,獲取學號和姓名
foreach($students as $key =>$v)
{
echo $key.":".$v;//輸出(打印)學號:姓名
echo "<br />";
}
?>
通過list()和each()遍歷數組
諤諤,這個方法常用嗎。大多數情況下foreach完全夠用啦。
但還是把示例代碼貼出來吧。
list()將數組中的值賦給變量
each()返回數組當前的鍵與值,并且指針下移一位
<?php
$arr=array('a'=>'11','b'=>'22','c'=>'33');
while(list($key,$var)=each($arr)){
echo $key.'='.$var,'<br/>';
}
?>
輸出數組
1.print_r()函數
print_r() 顯示關于一個變量的易于理解的信息。如果給出的是 string、integer或float,將打印變量值本身。如果給出的是數組,將會按照一定格式顯示鍵和元素。對象與數組類似。
記住,print_r() 將把數組的指針移到最后邊。使用 reset() 可讓指針回到開始處。
2.var_dump()函數
可以輸出數組(或對象),元素數量以及每個字符串的長度,還能以縮進方式輸出數組或對象的結構。
數組函數及應用
創建數組的函數
1.range()函數:創建并返回一個包含指定范圍的元素的數組;
2.array_combine():合并兩個數組為一新數組,一數組作鍵名,一數組作相應的值。
3.array_fill():用給定的值填充建立一個數組
4.array_pad():用指定值填充數組到指定長度,長度正填右,負填左,小于或等于不填充。
5.explode():字符串分割,返回值為數組;
數組統計函數
1.count()函數:統計數組中元素格式;
2.max()函數:統計計算數組中元素最大值;
3.min()函數:。。。。數組中元素最小值;
4.array_sum()函數:將數組中所有值的和以整數或浮點數的結果返回;
5.array_count_values()函數:
函數對數組中的所有值進行計數。
<?php
$a=array("A","Cat","Dog","A","Dog");
print_r(array_count_values($a));
?>
數組指針函數
1.key()函數:返回數組中當前單元的鍵名;
2.current()函數:返回數組中當前單元的值;
3.nect()函數:將數組內部指針前移一位;
4.pre()函數:將數組內部指針向后逆向移動一位(與next相反);
5.end()函數:將數組內部指針移動到最后一個單元,并返回其值;
6.reset()函數:將數組內部指針返回到第一個單元,并返回第一個單元值;
感覺這些平時不怎么用吧,后面要到再說吧。不然要谷歌干啥啊。
數組和變量之間的轉換
1.extract()函數:使用數組定義變量
可以使用數組定義一組變量,其中新定義的變量名是數組的鍵名,變量的值是數組元素鍵名對應的值。
<?php
$arr=arrar("name"=>"張三","sex"=>"男","age"=>"20");
extract($arr);
echo $name;
echo <br>;
echo $sex;
echo <br>;
echo $age;
?>
不出意外的話運行結果就應該是:
張三
男
20
2.compact()函數
和extract()恰恰相反,compact()函數可以使用變量建立一個數組,每個數組元素的變量名作為鍵名,每個數組元素變量的值作為變量名對應的變量值。
<?php
$a = "php";
$b = "java";
$c = "asp";
$result = compact("a","b","c");
print_r(result);
?>
不出意外的話,運行結果就應該是:
Array([a]=>php [b]=>java [c]=>asp)
數組檢索函數
1.array_keys()函數
用于獲取數組中所有的鍵名,返回值為數組。
<?php
$array = array(0=>100,"php"=>"圖書");
$arr1 = array_keys($array);
print_r($arr1); //這里應該輸出Array([0]=>0,[1]=>php)
$array = array("php","asp","java","php");
$arr2 = array_keys($array,"php");
print_r($arr2); //Array([0]=>0,[1]=>3)
?>
2.array_values()函數
用于返回數組中所有的值并給其建立數字索引。即使原來有數字索引也會被清楚,從0重新開始
<?php
$array = array("手冊"=>"php手冊","php應用","php"=>"php手冊","php應用","php案例");
$result = array_values($array);
print_r($result);
?>
不出意外的話,運行結果應該是:
Array([0]=>php手冊 [1]=>php應用 [2]=>PHP手冊 [3]=>php應用 [4]=>php案例)
3.in_array()函數
在數組中檢測某個值是否存在,找到存在則返回true,否則false。
<?php
$array = array("Php","asP","jAva","html");
if(in_array("php",$array)){
echo "php in array"; //檢索字符串時會區分大小寫
}
if(in_array("Java",$array)){
echo "JAva in array";
}
echo <br>;
$arr = array("100",200,300);
if(in_array("200",$arr,TRUE)){ //TRUE會要求數組值的類型也相同,區分字符類型
echo "200 in arr";
}
if(in_array(300,$arr,TRUE)){
echo "300 in array";
}
?>
不出意外的話,運行結果應該是:
jAva in array
300 in array
4.array_search()函數
用于在數組中具體搜索某個給定的值,若找到則返回鍵名,否則返回false。
<?php
$arr = array("php","asp","60");
if(array_search(60,$arr)){
echo "數組中有60"<br>;
}else{
echo "數組中沒有60<br>"
}
if(array_search(60,$arr,true){ //加上true選項,區分數據類型。
echo "數組中有60 <br>";
}else{
echo "數組中無60 <br>";
}
?>
如果上面代碼沒敲錯,不出意外的話,運行結果應該是:
數組中有60
數組中無60
5.array_key_exists()函數
檢查數組中是否存在給定的某鍵名/索引,若存在,則返回true
<?php
$array = array("php"=>58,"ajax"=>54);
if(array_key_exists("php",$arrar)){
echo "php這個鍵名存在于數組中";
}
?>
。。。。。這個還用我說運行結果嗎?
6.array_unique()函數
刪除數組中的重復元素,該函數會先將數組中的所有值作為字符串排序,然后每個值只保留一個。
<?php
$arr_int = array("PHP","JAVA","ASP","PHP","ASP");
$result = array_unique($arr_int);
print_r($result);
?>
不出意外的話,運行結果應該是:
Array([0]=>"PHP" [1]=>"JAVA" [2]=>"ASP");
數組排序函數
1.sort()函數
將數組元素值以升序排序,并為排序后的數組賦予新的整數鍵名索引。
<?php
$array = array("a"=>"asp","p"=>"php","j"=>"jsp");
sort($array);
print_r($array); //輸出的數組還是$array,也就是說sort()將數組array處理替換成了新的數組。
?>
那么,不出意外的話,運行結果就應該是:
Array([0]=>"asp" [1]=>"jsp" [2]=>"php")
2.asort()函數
與sort()函數相類似,區別在于排序后會保持數組元素原有的鍵值對的對應關系。
<?php
$array = array("a"=>"asp","p"=>"php","j"=>"jsp");
asort($array);
print_r($array);
?>
不出意外的話,運行結果如下:
Array([a]=>"asp" [j]=>"jsp" [p]=>"php")
3.rsort()和arsort()函數
rsort()函數與sort()函數的語法格式相同,arsort()函數與asort()函數的語法格式相同;區別之處在于rsort()和arsort()函數是按照降序排列的。
4.ksort()和krsort()函數
根據數組元素的鍵名按照升序/降序排序,排序后保持數組元素原有的“鍵值對對應關系”
<?php
$array1 = array("a"=>"asp","p"=>"php","j"=>"jsp");
ksort($array1);
print_r($array1);
echo <br>;
$array2 = array("a"=>"asp","p"=>"php","j"=>"jsp");
krsort($array2);
print_r($array2);
?>
不出意外的話,運行結果就應該是:
Array([a]=>"asp" [j]=>"jsp" [p]=>"php")
Array([p]=>"php" [j]=>"jsp" [a]=>"asp")
5.natsort()和natcasesort()函數
以自然排序算法對數組元素的值進行升序/降序排序。排序后保持數組元素原有的“鍵值對”對應關系。
鬼知道這個自然排序是怎么排的,貌似跟字符串的長度和字符順序大小有點關系。現在感覺用處不大,不管啦。
呃呃,還是把實例敲一遍吧。
<?php
$array1=array("index1","Index11","index2");
natsort($array1);
print_r($array1);
echo <br>;
$array2=array("index1","Index11","index2");
natcasesort($array2);
print_r($array2);
?>
反正資料上說運行結果應該是這樣的:
Array([1]=>Index11 [0]=>index1 [2]=>index2) //“鍵值對對應關系不變” 升序
Array([0]=>index1 [2]=>index2 [1]=>Index11) //“鍵值對對應關系不變” 降序
6.shuffle()函數
對數組中的元素進行隨機排序,隨機排序后的數組將會被賦予新的“整數鍵名”。
<?php
$array=array("a"=>"asp","p"=>"php","j"=>"jsp");
shuffle($array);
print_r($array);
?>
運行結果是什么???
不是都說了是隨機的啊。。
7.array_reverse()函數
返回一個和數組元素順序相反的新數組。
<?php
$arr = array("asp","php","jsp");
$result = array_reverse($arr); //不保留原有的“鍵值對”對應關系
print_r($result);
echo <br>;
$result2 = array_reverse($arr,true); //true選項,保留原有的“鍵值對”對應關系。
print_r($result2);
?>
又到了預測運行結果的時候了:
Array([0]=>jsp [1]=>php [2]=>asp)
Array([2]=>asp [1]=>php [0]=>jsp)
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊 函數好多啊,怎么可能完完全全牢牢記住不忘呢。還是過一遍留個影響 啊
啊 用的時候用啥查啥吧.... 啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
數組與數據結構
1.array_push()函數
用于向數組末尾添加一個或多個元素,并返回新數組元素的個數。
<?php
$array = array(0=>"php",1=>"java");
array_push($array,'VB','VC');
print_r($array);
?>
不出意外的話我,運行結果是:
Array([0]=>php [1]=>java [2]=>VB [3]=>VC)
2.array_pop()函數
用于彈出數組中最后一個元素,并返回該元素值。同時將數組的長度-1。如果數組為空(或者不是數組),將返回null。
<?php
$arr = array("asp","javasript","jsp","php");
$array = array_pop($arr);
echo "被彈出的單元是:$array <br>" ;
print_r($arr);
?>
如果不出意外的話,運行結果將會是:
被彈出的元素是:php
Array([0]=>asp,[1]=>javascript,[2]=>jsp)
哈哈哈,大人真乃神人也~預測的一點也不錯。
嗯嗯。我可能瘋了。我傻,我呆??,我蠢。。。
3.array_shift()函數
刪除數組第一個元素,并返回該元素值。數組為空或非數組則返回null。
<?php
$arr = array("php手冊","php案例","php應用");
$result = array_shift($arr);
echo $result.<br>;
print_r($arr);
?>
不出意外的話,運行結果應該是:
php手冊
Array([0]=>php案例 [1]=>php應用)
4.array_unshift()函數
用于在數組開頭插入一個或多個元素,并返回插入元素的個數。
<?php
$array = array(0=>"php",1=>"java");
array_unshift($array,'VB','VC');
print_r($array);
?>
不出意外的話,運行結果是:
Array([0]=>VB [1]=>VC [2]=php [3]=>java)
數組集合類函數
1.array_merge()函數
可以把兩個或多個數組合并成一個數組。
在合并數組時,如果輸入的數組中有相同的字符串鍵名,則后面的值將覆蓋前面的值;如果數組包含數字鍵名,后面的值不會覆蓋原來的值,而是附加到后面。
<?php
$str1 = array("圖書"=>"白鹿原",10);
$str2 = array("圖書"=>"茶花女","PHP"=>"95元",10);
$result = array_merge($str1,$str2);
print_r($result);
?>
不出意外的話,代碼的運行結果應該為:
Array([圖書]=>茶花女 [0]=>10 [PHP]=>95元,[1]=10)
//有相同的字符串鍵名,則后面的值將覆蓋前面的值
//數組包含數字鍵名,后面的值不會覆蓋原來的值,而是附加到后面
2.array_diff()函數
用來計算數組的差集,結果返回一個數組。該數組包括所有在被比較的數組中但是不在任何其他參數數組中的值,鍵名保留不變。
<?php
$array1 = array("asp"=>"實例應用","php"=>"函數手冊","java"=>"基礎應用");
$array2 = array("asp"=>"實例應用","函數大全","基礎應用");
$result = array_diff($array1,$array2); //其實括號中的參數可以是好多個,但是最少要兩個啊。
print_r($result);
?>
反正書上說運行結果是:
Array([php]=>"函數手冊");
呃呃呃,書上啰里啰唆說了半天。就是第一個數組是被比較數組,后面其他的數組都是比較數組。
被比較數組有,而比較數組沒有的。把數組中的這個元素的鍵名和值產生一個新的數組。
3.array_diff_assoc()函數
帶索引檢查計算數組的差集。。。(什么玩意???不懂!)結果返回一個數組。該數組包括所有在被比較的數組中但是不在任何其他參數數組中的值,鍵名也用于比較。
又是不啦不啦的一段屁話,還不如實例讓人看得明白。上示例代碼!
<?php
$array1 = array("asp"=>"實例應用","php"=>"函數手冊","java"=>"基礎應用");
$array2 = array("asp"=>"實例應用","函數大全","基礎應用");
$result = array_diff_assoc($str1,$str2);
print_r($result);
?>
。。。沒看到狗屁概念,運行結果沒法預測啊。。。
抄資料吧。
Array([php]=>函數手冊 [java]=>基礎應用)
呃呃呃,作用跟array_diff()函數都是一樣的,只不過比較的時候也要比較鍵名。也就是說array_diff()函數在比較數組差集的時候是無視掉鍵名的。
4.array_diff_key()函數
用來計算數組差集,結果返回為數組。貌似主要是在比較鍵名,而array_diff()和array_diff_assoc()兩個函數貌似主要是用值在比較呢。
不廢話,直接上示例代碼;
<?php
$array1 = array("asp"=>"實例應用","php"=>"函數手冊","java"=>"基礎應用");
$array2 = array("asp"=>"實例大全","函數大全","基礎應用");
$result = array_diff_key($array1,$array2);
print_r($result);
?>
不想預測結果了,本篇后面的幾個示例我都不想預測了。。。
Array([php]=>函數手冊 [java]=>基礎應用)
加油,堅持。再有三個導函數這篇文章就寫完了啊aaa!
5.array_intersect()函數
用來獲取多個數組的交集。沒錯就像集合的交集一樣。之前還改人家的標題數組集合類函數,寫到這里才真正理解了,這些函數就是集合概念相關的函數啊。
<?php
$array1 = array("asp"=>"實例應用","php"=>"函數手冊","java"=>"基礎應用");
$array2 = array("asp"=>"實例應用","函數大全","基礎應用");
$result = array_intersect($array1,$array2);
print_r($result);
?>
運行結果:
Array([asp]=>實例應用 "java" => 基礎應用)
6.array_intersect_assoc()函數
作用和array_intersect()函數一樣,只是作交集運算時,鍵名也加入比較。類比下array_diff()函數之于array_diff_assoc()函數。
實例略了,略了。跟上一個一樣,有啥好寫的。。。
7.array_intersect_key()
我天,略去了一個真爽。。。一下子就到了最后一個函數了。
呃呃,這個函數和之前的函數類比也是一下子就理解了啊。求交集,以鍵名為主求交集。array_intersect()和array_intersect_assoc()函數在求交集的時候主要是以值為主,求的交集啊。
略了,略了。這個也略了。么錯,就這么懶,就這么任性。
最后總結下數組集合類的函數特點。
array_merge()函數用來把多個數組合并為一個數組。
array_diff() 以數組的值為主,返回其差集
array_diff_assoc() 以數組的值為主,帶上鍵名返回其差集
array_diff_key() 以數組的鍵名為主,返回其差集
array_intersect() 以數組的值為主,返回其交集
array_intersect_assoc() 以數組的值為主,帶上鍵名返回其交集
array_intersect_key() 以數組的鍵名為主,返回其交集。
//不是要用別人的,總結是自己原創總結的。轉載保留出處啊。
嗯嗯。沒毛病。終于寫完啦。。。這一篇寫了我兩天啊啊啊。
好久沒寫博客,一寫寫了一大長篇。