數組在php中是以鍵-值對的方式存儲--Map(key , value) 。數組的索引就是key,或者定義一個屬性做爲key均可以。php
一、array( ): 建立數組html
php中,有三種數組類型:索引數組,關聯數組,多維數組。c++
索引數組,帶數字索引的數組,$arr1=array( "A" , "B" , "C" ),默認索引 0,1,2...;正則表達式
關聯數組,帶指定鍵的數組,$arr2=array( "id"=>1 , "name"=>"Tom" , "info"=>"Tom is ...." );c#
多維數組,數組的元素又是數組。數組
<?php header("content-type: text/html;charset=utf-8"); /*索引數組*/ echo "索引數組<br />方式一:索引自動分配<br />"; $arr1=array("A","B","C"); print_r($arr1); echo "<br />"."方式二:手動分配索引:<br />"; $arr2=array(); $arr2[0]="A"; $arr2[1]="B"; $arr2[2]="C"; print_r($arr2); /*關聯數組*/ echo "<hr/>"."關聯數組<br />"; $arr3=array("id"=>1,"name"=>"Tom","info"=>"Tom is ..."); print_r($arr3); /*多維數組*/ echo "<hr/>"."多維數組<br />"; $arr4=array(array(1,2,3),array("a","b","c","d"),array("Tom")); echo "<pre>";//<pre>...</pre>預格式化文本 print_r($arr4); echo "</pre>"; ?>
上述代碼的運行結果以下圖所示:函數
二、數組的循環遍歷code
a. for循環(只能用於默認索引),以下段代碼示例所示,打印的結果是 A B C D E。其中,count($arr1)是計算數組$arr1的數組元素個數。htm
<?php header("content-type: text/html;charset=utf-8"); $arr1=array("A","B","C","D","E"); for ($i=0; $i<count($arr1); $i++) { echo $arr1[$i]." "; } ?>
b. foreach循環,專門用於數組的循環遍歷。 語法格式是: foreach( $數組名 as $key => $value){ .... //代碼段 } 。其中,key是因此下標,value是該下標對應的數組元素。排序
<?php header("content-type: text/html;charset=utf-8"); //foreach 循環索引數組 echo "foreach 循環索引數組:<br/>"; $arr1=array("A","B","C","D","E"); foreach ($arr1 as $key => $value) { echo $key.":".$value." "; } echo "<br />"; //foreach 循環關聯數組 echo "foreach 循環關聯數組:<br/>"; $arr2=array("id"=>1,"name"=>"Tom","info"=>"Tom is ..."); foreach ($arr2 as $key => $value) { echo $key.":".$value." "; } ?>
本段代碼執行結果以下圖所示:
三、經常使用的數組相關操做
a. 刪除數組中的元素,unset( )。注意:刪除數組元素,可是數組索引不變,所以採用for循環會有問題。建議數組循環遍歷使用foreach循環。具體使用方法見下段代碼實例:
<?php header("content-type: text/html;charset=utf-8"); $arr1=array("A","B","C","D","E"); print_r($arr1);//打印原數組 echo "<br/>"; unset($arr1[0]);//刪除數組$arr1中索引爲0的元素。 print_r($arr1);//再次打印該元素 ?>
上段代碼的運行結果是:
Array ( [0] => A [1] => B [2] => C [3] => D [4] => E )
Array ( [1] => B [2] => C [3] => D [4] => E )
注意:通過我試驗,不能直接使用 unset("A")來刪除該元素,會報錯。
b. 數組的複製:直接使用「=」。須要注意的是,該數組複製成功後,改變$arr1數組中的值時,$arr2數組值不會隨之改變(即,值傳遞,並不是地址傳遞)。
<?php header("content-type: text/html;charset=utf-8"); $arr1=array("A","B","C","D","E"); $arr2=$arr1;//傳遞副本(不是數組的地址) print_r($arr2); ?>
c. 數組中添加元素:兩種方式,指定索引和不指定索引,具體見下段代碼:
<?php header("content-type: text/html;charset=utf-8"); $arr= array();//建立數組 //添加數組元素方式一:指定索引 $arr[0]=1;//添加索引爲0的元素 1 $arr["id"]="001";//添加索引下標爲id的數組元素 001 $arr["name"]="Tom"; print_r($arr);//打印該數組 echo "<br/>"; //添加數組元素方式二:不指定索引 $arr[]="NanKing";//不指定索引而直接添加新元素,該元素添加到本數組的末尾,索引默認+1 print_r($arr);//打印該數組 ?>
上段代碼的執行結果是:
Array ( [0] => 1 [id] => 001 [name] => Tom )
Array ( [0] => 1 [id] => 001 [name] => Tom [1] => NanKing )
d. 排序:sort( ),升序排序,sort( )函數直接修改原數組的順序。rsort( )降序排序。具體用法見下代碼段。當數組元素是數字是,按數字大小比較;當數組元素是字符串是,按首字母ASCII大小比較。
<?php header("content-type: text/html;charset=utf-8"); $arr1=array(22,35,14,69,8,100,66); echo "<br/>"."原數組:"; print_r($arr1); echo "<br/>sort()排序後"; sort($arr1);//sort()排序 print_r($arr1);//打印排序後的數組 $arr1=array(22,35,14,69,8,100,66); echo "<br/>"."原數組:"; print_r($arr1); echo "<br/>rsort()排序後"; rsort($arr1);//rsort()排序 print_r($arr1);//打印原數組 //字符串是按照首字母順序排序 $arr2=array("Tom","Alice","ceil","Ben","Jack"); echo "<br/>"."原數組:"; print_r($arr2); echo "<br/>sort()排序後"; sort($arr2);//sort()排序 print_r($arr2);//打印排序後的數組 ?>
本段代碼的執行結果以下所示:
原數組:Array ( [0] => 22 [1] => 35 [2] => 14 [3] => 69 [4] => 8 [5] => 100 [6] => 66 )
sort()排序後Array ( [0] => 8 [1] => 14 [2] => 22 [3] => 35 [4] => 66 [5] => 69 [6] => 100 )
原數組:Array ( [0] => 22 [1] => 35 [2] => 14 [3] => 69 [4] => 8 [5] => 100 [6] => 66 )
rsort()排序後Array ( [0] => 100 [1] => 69 [2] => 66 [3] => 35 [4] => 22 [5] => 14 [6] => 8 )
原數組:Array ( [0] => Tom [1] => Alice [2] => ceil [3] => Ben [4] => Jack )
sort()排序後Array ( [0] => Alice [1] => Ben [2] => Jack [3] => Tom [4] => ceil )
e. 數組的定位:reset( ) 第一個,next( ) 下一個(若是已經在末尾,那麼下一個返回時false),prev( ) 前一個,end( ) 末尾,current()當前。
<?php header("content-type: text/html;charset=utf-8"); $ary=array("Tom", "Sam", "Ben", "Sophia"); // reset 第一個 // next 下一個,若是已經在末尾,那麼下一個返回是false // prev 前一個 // end 末尾 // current 當前 //順序遍歷數組 do { echo current($ary),"<br/>"; } while (next($ary)); echo "<hr/>"; //定位到末尾 end($ary); //倒序遍歷數組 do { echo current($ary),"<br/>"; } while(prev($ary)); ?>
四、數組中經常使用函數
a. in_array("元素名","數組名"):判斷數組中是否包含該元素。
<?php $ary=array("Java", "PHP", "Web", "C++");//聲明數組 echo var_dump(in_array("C++", $ary));//$ary數組中包含C++ echo "<br/>"; echo var_dump(in_array("JSP",$ary));//$ary數組中不包含JSP ?>
b. array_reverse($ary): 倒序(原數組元素順序的倒序,並不是排序)。下段代碼的打印結果是:Array ( [0] => C++ [1] => Web [2] => PHP [3] => Java )
<?php $ary=array("Java", "PHP", "Web", "C++");//聲明數組 print_r(array_reverse($ary));//倒序並打印 ?>
c. array_merge($ary1,$ary2): 數組的合併。
<?php $ary=array("Java", "PHP", "Web", "C++");//聲明數組 $ary2=array_merge($ary, array("C", "C++", "C#"));//將$ary數組與新數組["c","c++","c#"]合併,合併結果賦給$ary2。 print_r($ary2);//打印$ary2結果是: Array ( [0] => Java [1] => PHP [2] => Web [3] => C++ [4] => C [5] => C++ [6] => C# ) ?>
d. array_unique($ary2): 數組去重(若數組元素有重複,刪除後面的元素)
<?php $ary=array("Java", "PHP", "Web", "C++");//聲明數組 $ary2=array_merge($ary, array("C", "C++", "C#"));//將$ary數組與新數組["c","c++","c#"]合併,合併結果賦給$ary2。 print_r($ary2);//打印$ary2結果是: // Array ( [0] => Java [1] => PHP [2] => Web [3] => C++ [4] => C [5] => C++ [6] => C# ) echo "<br/>"; $ary3=array_unique($ary2);//去除$ary2中重複的元素 print_r($ary3); ?>
上述代碼打印$ary2的結果是:Array ( [0] => Java [1] => PHP [2] => Web [3] => C++ [4] => C [5] => C++ [6] => C# )
去重後,打印$ary3的結果是:Array ( [0] => Java [1] => PHP [2] => Web [3] => C++ [4] => C [6] => C# )
e. array_push($ary , 新元素): 在數組的末尾添加元素
<?php $ary=array("Java", "PHP", "Web", "C++");//聲明數組 array_push($ary, "C#");//在數組$ary末位添加元素「C#」 print_r($ary);//打印插入新元素後的$ary; ?>
c. shuffle($ary): 數組洗牌效果(把數組中的元素按隨機順序從新排列)
<?php header("content-type: text/html;charset=utf-8"); $ary=array("Java", "PHP", "Web", "C++");//聲明數組 echo "\$ary原數組:"; print_r($ary); echo "<br/>"; echo "第一次洗牌後:"; shuffle($ary); print_r($ary);//打印第一次洗牌後的$ary echo "<br/>"; echo "第二次洗牌後:"; shuffle($ary); print_r($ary);//打印第二次洗牌後的$ary ?>
上段代碼運行結果是:
若想了解更多數組函數,能夠參考w3cschool中的《PHP 5 Array 函數》。
五、數組與字符串的轉化
a. explode( separator , string ,limit ): 將字符串拆分紅數組。separator:必需,規定在哪裏分割字符串。string:必需,要分割的字符串。limit:可選,規定所返回的數組元素的數目,默認所有。
<?php $str="Java-Web-PHP-C#-C++-phyon";//須要拆分的字符串 $arr=explode("-",$str);//將字符串$str在「-」出拆分,返回結果放到$arr中 print_r($arr);//打印$arr; ?>
上段代碼的打印結果是:Array ( [0] => Java [1] => Web [2] => PHP [3] => C# [4] => C++ [5] => phyon )。
b. implode(separator , array): 把數組元素組合爲一個字符串。separator:可選,規定數組元素之間放置的內容,默認是「」(空字符串)。array:必需案,要組合爲字符串的數組。
<?php $str="Java-Web-PHP-C#-C++-phyon";//須要拆分的字符串 $arr=explode("-",$str);//將字符串$str在「-」出拆分,返回結果放到$arr中 print_r($arr);//打印$arr; echo "<hr/>"; $str2=implode(",",$arr);//將數組用「,」鏈接轉成字符串。 echo $str2; ?>
六、preg_match_all( )
preg_match_all( ):它的第一個參數是正則表達式,表示匹配條件;第二個參數是字符串;第三個參數是存放匹配結果的數組。具體使用方法見下段實例:
<?php $msgs="Students' no is: 18877, 19900, 16789, 13456,12346!"; //找出字符串$msgs中五位數字 preg_match_all("/\d{5}/", $msgs, $numbers); print_r($numbers); ?>
本段代碼的打印結果是:Array ( [0] => Array ( [0] => 18877 [1] => 19900 [2] => 16789 [3] => 13456 [4] => 12346 ) )。