php語法-----03 php 數組相關

        數組在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 ) )。

相關文章
相關標籤/搜索