PHP-----PHP程序设计基础教程----第四章数组
4.1 初識數組
4.1.1 什么是數組
數組是一個可以存儲一組或者一系列數值的變量。在PHP中,數組中的元素分兩部分,分別為鍵(Key)和值(Value)。其中,“鍵”為元素的識別名稱,也被稱為數組下標,“值”為元素的內容。“鍵”和“值”存在一種對應關系,稱為映射。
1、索引數組
下標為整數的數組,即數組的“鍵”為整數,僅僅指示元素在數組中的位置,不表示對應值的含義
2、關聯數組
下標為字符串的數組,即數組的“鍵”為字符串,顯示時,以元素的添加順序有關,與下標順序無關
3、混合數組
數組的“鍵”既有整數,也有字符串的數組
4.1.2 數組的定義
1、使用賦值方式定義數組
<?php //**********定義索引數組**********////方式1:$arr1[0]="歐陽華夏";//姓名$arr1[1]=25;//年齡$arr1[2]="男";//性別$arr1[3]=true;//是否單身echo "<pre>";print_r($arr1);echo "</pre>";/*輸出結果:Array([0] => 歐陽華夏[1] => 25[2] => 男[3] => 1)*///方式2:$arr2[]="歐陽華夏";//姓名$arr2[]=25;//年齡$arr2[]="男";//性別$arr2[]=true;//是否單身echo "<pre>";print_r($arr2);echo "</pre>";/*輸出結果:Array([0] => 歐陽華夏[1] => 25[2] => 男[3] => 1)*///方式3$arr3=[0=>"歐陽華夏",1=>25,3=>"男",4=>true];echo "<pre>";print_r($arr3);echo "</pre>";/*輸出結果:Array([0] => 歐陽華夏[1] => 25[2] => 男[3] => 1)*///**********定義關聯數組**********////方式4:$arr4["name"]="歐陽華夏";//姓名$arr4["age"]=25;//年齡$arr4["sex"]="男";//性別$arr4["is_Single"]=true;//是否單身echo "<pre>";print_r($arr4);echo "</pre>";/*輸出結果:Array([name] => 歐陽華夏[age] => 25[sex] => 男[is_Single] => 1)*///方式5$arr5=["name"=>"歐陽華夏","age"=>25,"sex"=>"男","is_Single"=>true];echo "<pre>";print_r($arr5);echo "</pre>";輸出結果:/*Array([name] => 歐陽華夏[age] => 25[sex] => 男[is_Single] => 1)*/ ?>
在上述示例代碼中,分別定義了索引數組和關聯數組
①方式1對應方式4,創建一個數組變量,使用賦值運算符挨個給數組變量賦值
②方式2創建數組,賦值時沒有指定“鍵”,使用默認鍵,即“鍵”從0開始
③方式3對應方式5,在一個“[]”中使用“=>”符號給數組賦值
2、使用array()函數定義數組
除了通過賦值方式定義數組外,還可以使用array()函數定義數組,它接收數組的元素作為參數,多個元素之間使用英文逗號分隔;
<?php //**********定義索引數組**********////方式1$arr1=array("歐陽華夏",28,"男",true); //**********定義關聯數組**********//$arr2=array("name"=>"歐陽華夏","age"=>28,"sex"=>"男","is_Single"=>true); ?>
4.1.3 數組元素的獲取
獲取數組中單個元素的值:
$數組名[鍵名]?
打印數組的全部值:
<?php /************************方法1********************************/echo "<pre>";print_r("數組名")echo "</pre>"; /************************方法2********************************/echo "<pre>";var_dump("數組名")echo "</pre>"; ?>
PHP提供了print_r()函數和var_dump(),專門用于輸出數組中的所有元素,需要注意一下幾點:
①print_r()函數只能打印出來數組中的元素
②var_dump()函數在打印數組中元素的同時還能打印出元素中值的數據類型
③在上述代碼中,都有兩行echo "<pre>"代碼,其中“pre”標簽的作用是用格式化文本輸出。
?4.1.4 刪除數組
PHP中提供了unset()函數用于刪除數組的元素,使用規則:
①語法:?unset(數組名[索引])?
②刪除元素后數組不會重建該元素的索引。即未被刪除的元素的索引不會因為刪除了元素而改變
③可以刪除整個數組:?unset(數組名)?
4.1.5 數組操作符
數組這種符合類型的數據可以進行運算,數組的運算通過數組操作數實現。見表4-1:
表4-1 數組操作運算符
| 運算符 | 含義 | 示例 |
| + | 聯合 | $a+$b;$a和$b的聯合 |
| == | 相等 | $a==$b;如果$a和$b具有相同的鍵值對,則為true |
| === | 全等 | $a===$b;如果$a和$b具有相同的鍵值對且順序和類型都相同則為true |
| != | 不等 | $a!=$b;如果$a不等于$b,則為true |
| <> | 不等 | $a<>$b;如果$a不等于$b,則為true |
| !== | 不全等 | $a!===$b;如果$a不全等于$b,則為true |
? 注:”+“為聯合運算符,用于合并數組。如果出現下標相同的元素,則保留第一個數組內的元素。
?
4.2 數組的常見操作
4.2.1 數組指針
對數組中的元素進行訪問過程中需要用到數組指針。數組指針用于指向數組中的某個元素,默認情況下指向數組的第一個元素。注意:一個數組只有一個數組指針。具體數組指針見表4-2:
表4-2 數組指針操作函數
| 函數名 | 作用 |
| mixd current(array $array) | 獲取數組中當前元素的值,如果內部指針超出數組的末端,則返回false |
| mixd key(array $array) | 獲取當前元素的鍵名 |
| mixd next(array $array) | 將數組的內部指針向前移動一位 |
| mixd prev(array $array) | 將數組的內部指針倒回一位 |
| mixd end(array $array) | 將數組的內部指針指向最后一個元素 |
| mixd reset(array $array) | 重置指針,即將數組的指針指向第一個元素 |
4.2.2 數組遍歷
在PHP中使用foreach語句實現數組的遍歷:
無鍵名遍歷
foreach(數組名 as $Value){ //循環體 }
鍵值對遍歷
foreach(數組名 as $Key => $Value){//循環體 }
4.2.3 數組排序----冒泡排序
?
1 <?php 2 //********************冒泡排序*******************// 3 $array=[9,8,2,5,3]; 4 /*從小到大 5 冒泡排序思路: 6 1、從第一個元素開始,將相鄰的兩個元素依次進行比較,直到最后兩個元素完成比較。如果前一個元素比后一個元素大,交換位置,整個 7 過程完成后,數組中最后一個元素就是最大值,這就完成了第一輪比較 8 2、除了最后一個元素,將剩余的元素進行兩兩比較,過程與第一步相似,這樣就可以將數組中第二大的數放在倒數第二個位置 9 3、依次類推,持續對元素進行兩兩比較,直到沒有任何一對元素需要比較為止 10 */ 11 12 for($i=0;$i<count($array)-1;$i++){ 13 //最外層循環,控制比較的輪數,很明顯,冒泡排序比較輪數=數組長度-1 14 for($j=0;$j<count($array)-1-$i;$j++){ 15 //里層循環控制相鄰的兩個數,$j的取值范圍要注意,沒進行一輪,$j的取值小一次 16 if($array[$j]>$array[$j+1]){ 17 $temp=$array[$j]; 18 $array[$j]=$array[$j+1]; 19 $array[$j+1]=$temp; 20 } 21 } 22 }
?
4.2.4 數組元素查找
? 1、順序查找法----------查找一個數組中是否包含數字8,如果包含,返回當前元素的索引,否則返回“查無此數”;
1 <?php 2 //定義數組 3 $arr=array(2,3,5,8,9); 4 //定義函數,查找數字8 5 function searchIndex($Array,$Value){ 6 for($i=0;$i<count($Array);$i++){ 7 if($Array[$i]===$Value){ 8 return $i ; 9 } 10 } 11 return "查無此數"; 12 } 13 14 $result=searchIndex($arr,8); 15 echo $result; 16 ?>
2、二分查找法-----查找一個數組中是否包含元素5,如果存在,則輸出下標,否則返回“查無此數”
1 <?php 2 //定義數組, 3 $arr=array(2,3,5,8,9,11,16); 4 //定義函數 5 function binarySearch($Array,$Value,$Start_index,$End_index){ 6 if($Start_index > $End_index){ 7 return "查無此數"; 8 } 9 //獲取中間元素下標 10 $Mid_index=round(($Start_index + $End_index)/2); 11 if($Array[$Mid_index] > $Value){//元素在中間元素的左邊 12 //從左邊查找 13 binarySearch($Array,$Value,$Start_index,$Mid_index-1); 14 }else if($Array[$Mid_index] < $Value){//元素在中間元素右邊 15 //從右邊查找 16 binarySearch($Array,$Value,$Mid_index+1,$End_index); 17 }else{//查找元素和中間元素值相同 18 echo $Mid_index; 19 } 20 } 21 binarySearch($arr,5,0,count($arr)-1); 22 ?>
4.3 數組的常用函數
?4.3.1 基本函數
1、is_array()函數
? is_array()函數的作用是判斷一個變量是否是一個數組,如果是數組,返回true,否則返回false。
?bool is_array(mixed $var);?
is_array()函數接受一個mixed類型的變量var,然后判斷這個變量是不是數組。
?
2、count()函數
count()函數的作用是用于計算數組中元素的個數。
?int count(mixed $var [,int $mode]);?
在上述聲明中,count()函數接收兩個參數,其中$var參數是必須的,表示傳入的數組對象;$mode參數是可選參數,值為0或者1。
$mode=0----->只顯示一維數組的個數;
$mode=1----->遞歸計算多維數組中每個元素的個數;
示例如下:
1 <?php 2 //一維數組$arr1 3 $arr1=array("百度","新浪","搜狐","網易","傳智"); 4 //輸出長度 5 echo '一維數組$arr1的長度是:' . count($arr1) . "<br/>"; 6 7 //二維數組 8 $arr2=array( 9 '$arr3'=>array("a","b","c","d","e"), 10 '$arr4'=>array("1","2","3","4","5") 11 ); 12 //輸出長度 13 14 //所有元素 15 echo '$arr2的所有元素的個數:' . count($arr2,1) . "<br/>";//計算二維數組中所有元素的個數,12個 16 //一維元素 17 echo '$arr2的一維元素的個數:' . count($arr2) . "<br/>";//計算二維數組中所有一維元素的個數,2個 18 ?>
?
? 3、array_unique()函數
array_unique()函數的作用是移出數組中的重復元素。
?array array_unique(array $array);?
在上述聲明中,array_unique()函數接受一個數組,去除重復元素后返回一個新的數組。在使用該函數時,首先將數組元素的值作為字符串排序,然后對每個值只保留第一個鍵名,忽略后面所有的鍵名。
1 <?php 2 $input=array("a"=>"green","red","b"=>"green","blue","red"); 3 echo "<pre>"; 4 print_r($input); 5 //調用函數 6 $result=array_unique($input); 7 print_r($result); 8 echo "</pre>"; 9 10 /*運行結果 11 Array 12 ( 13 [a] => green 14 [0] => red 15 [b] => green 16 [1] => blue 17 [2] => red 18 ) 19 Array 20 ( 21 [a] => green 22 [0] => red 23 [1] => blue 24 ) 25 */ 26 ?>
4.3.2 鍵值對的相關函數
? 1、array_search()
array_search()函數用于獲取數組中元素對應的鍵名。
? ??array array_search(mixed $needle,array $haystack [,bool $strict]);?
在上述聲明中,$needle表示在數組中要查找的值,$haystack表示被查詢的數組。$strict參數是可選的,當值為true時,就會在$haystack數組中檢查$needle的類型。
1 <?php 2 $array=array(0=>"blue",1=>"red",2=>"green",3=>"red"); 3 echo "green對應的鍵為:"; 4 echo array_search("green",$array); 5 //結果:green對應的鍵為:2 6 ?>
當被查詢的元素在數組中出現兩次以上時,那么array_search()函數返回第一個匹配的鍵名。
?
2、array_keys()函數
array_keys()函數同樣用于獲取數組中元素對應的鍵名。不同的是,array_keys()函數可以返回所有匹配的鍵名。
? ???array array_keys(array $input [,mixed $search_value [,bool $strict]]); ?
上述聲明中,$input表示要被查詢的數組;$search_value參數是可選參數,當給$search_value賦值時,函數返回該值的鍵名,否則返回$input數組的所有的鍵名。$strict參數用來進行全等比較,需要傳入一個布爾值,默認為false,如果為true則根據類型返回帶有指定值的鍵名。
1 <?php 2 //定義數組arr1 3 $arr1=array(0=>"ttg","name"=>"dandy"); 4 print_r(array_keys($arr1)); //返回數組中元素的所有鍵名 5 //Array ( [0] => 0 [1] => name ) 6 print_r(array_keys($arr1,"dandy")); //獲取數組元素為"dandy"對應的鍵名 7 // Array ( [0] => name ) 8 9 //定義數組arr2 10 $arr2=array(11,12,32,"11"); 11 print_r(array_keys($arr2,11)); //獲取元素11(不依賴類型) 12 //Array ( [0] => 0 [1] => 3 ) 13 print_r(array_keys($arr2,"11",true)); //獲取字符串類型的元素的"11" 14 // Array ( [0] => 3 ) 15 ?>
array_keys()函數可以根據傳入的參數,返回不同的鍵名。當傳入的參數是一個數組時,則返回所有的鍵。當傳入一個指定數組中某個元素時,返回該元素對應的鍵。
?
4.3.3 排序函數
PHP提供了多個排序的函數,例如sort()函數、rsort()函數、ksort()函數等。
以sort()函數為例,講解數組的排序功能。sort()函數的作用就是對數組中的元素按照從小到大的順序進行排序。
?bool sort(array $array [,int $sort_flag=sort_regular]);?
在上面的聲明中,$array參數表示需要排序的數組,$sort_flag是可選參數,sort()函數會根據$sort_flag的值改變數組的排序方式。$sort_flag的取值如表4-3所示:
表4-3?$sort_flag的取值范圍
| 取值范圍 | 排序方式 |
| SORT_REGULAR | 默認值,將自動識別數組元素的類型進行排序 |
| SORT_NUMERIC | 用于數字元素的排序 |
| SORT_STRING | 用于字符串元素的排序 |
| SORT_LOCALE_STRING | 跟去當前local設置來把元素當作字符串比較 |
示例代碼:
<?php$arr=array("4apple","3banana","1orange","2peach");sort($arr,SORT_NUMERIC);echo "<pre>";print_r($arr);echo "</pre>";/*運行結果:Array([0] => 1orange[1] => 2peach[2] => 3banana[3] => 4apple)*/ ?>
?
4.3.4 合并和拆分函數
? 1、array_merge()函數
array_merge()函數的作用是合并一個或多個數組。
?array array_merge(array $array1 [,array $...]);?
array_merge()將一個或者多個數組的單元合并起來,一個數組的值附加在另一個數組的后面,返回一個新的數組。
①如果輸入的數組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前面的值;
②如果數組中包含數字鍵名,后面的值不會覆蓋原來的值,而是附加在數組的后面;
③如果數組是數字索引的,則鍵名會以連續方式重新編排索引。
1 <?php 2 $array1=array("color"=>"red",2,4); 3 $array2=array("a","b","color"=>"green","shape"=>"trapezoid",4); 4 $result=array_merge($array1,$array2); 5 echo "<pre>"; 6 print_r($result); 7 echo "</pre>"; 8 9 /*運行結果: 10 Array 11 ( 12 [color] => green 13 [0] => 2 14 [1] => 4 15 [2] => a 16 [3] => b 17 [shape] => trapezoid 18 [4] => 4 19 ) 20 */ 21 ?>
?
? 2、array_chunk()函數
函數array_chunk()的作用是將一個數組分割成多個數組。
?array array_chunk(array $input,int $size [,bool $preserve_keys]);?
上述聲明中,$input表示要分割的數組,$size是分割后每個數組中元素的個數,$preserve_keys是一個可選參數。如果將該參數設置為true,則分割后的數組中元素保留原來的索引,如果將該參數設置為false,則分割后數組中的元素的索引將從零開始。
代碼如下:
1 <?php 2 $arr=array("cctv-a","cctv-b","cctv-c"); 3 //分割數組 4 echo "<pre>"; 5 echo "分割后的數組為:" . "<br/>"; 6 print_r(array_chunk($arr,2)); 7 echo "</pre>"; 8 /*運行結果: 9 分割后的數組為: 10 Array 11 ( 12 [0] => Array 13 ( 14 [0] => cctv-a 15 [1] => cctv-b 16 ) 17 18 [1] => Array 19 ( 20 [0] => cctv-c 21 ) 22 23 ) 24 */ 25 26 //第二次分割 27 echo "<pre>"; 28 echo "分割后的數組為:" . "<br/>"; 29 print_r(array_chunk($arr,2,true)); 30 echo "</pre>"; 31 /*運行結果: 32 分割后的數組為: 33 Array 34 ( 35 [0] => Array 36 ( 37 [0] => cctv-a 38 [1] => cctv-b 39 ) 40 41 [1] => Array 42 ( 43 [2] => cctv-c 44 ) 45 46 ) 47 */ 48 ?>
?
?4.3.5 其他函數
? 1、array_rand()函數
? array_rand()函數的作用是從數組中隨機取出一個或多個元素。
?mixed array_rand(array $input [,int $num_req]);?
array_rand()函數接受一個input參數和一個可選的參數num_req,其中input參數用于指定接受的數組,num_req用于指定取出元素的個數,默認為1。如果只取出一個元素,array_rand()會返回一個隨機元素的鍵名,否則返回一個包含隨機鍵名的數組。
代碼如下:
1 <?php 2 $input=array("科比","姚明","詹姆斯","艾佛森","基德"); 3 echo "<pre>"; 4 echo "隨機獲取一個元素" . "<br/>"; 5 print_r(array_rand($input)); 6 echo "<br/>"; 7 echo "隨機獲取兩個元素" . "<br/>" ; 8 print_r(array_rand($input,2)); 9 echo "</pre>"; 10 11 /*運行結果: 12 隨機獲取一個元素 13 2 14 隨機獲取兩個元素 15 Array 16 ( 17 [0] => 2 18 [1] => 3 19 ) 20 */ 21 ?>
?
2、array_reverse()
array_reverse()函數的作用是返回一個元素順序相反的數組。
?array array_reverse(array $array [,bool $preserve_keys]);?
array_reverse()接受數組array作為輸入并返回一個元素為相反順序的新數組,如果preserve_keys為true,則保留原來的鍵名。
代碼如下:
1 <?php 2 $input=array("ibim",122,array("dell","apple")); 3 $result=array_reverse($input); 4 echo "<pre>"; 5 print_r($result); 6 echo "</pre>"; 7 /*運行結果: 8 Array 9 ( 10 [0] => Array 11 ( 12 [0] => dell 13 [1] => apple 14 ) 15 16 [1] => 122 17 [2] => ibim 18 ) 19 鍵名被修改 20 */ 21 $result_keyed=array_reverse($input,true); 22 echo "<pre>"; 23 print_r($result_keyed); 24 echo "</pre>"; 25 /*運行結果: 26 Array 27 ( 28 [2] => Array 29 ( 30 [0] => dell 31 [1] => apple 32 ) 33 34 [1] => 122 35 [0] => ibim 36 ) 37 鍵名保留不會修改 38 */ 39 ?>
轉載于:https://www.cnblogs.com/WangYujie1994/p/10342474.html
總結
以上是生活随笔為你收集整理的PHP-----PHP程序设计基础教程----第四章数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的大学生活,短而充实,我们一起探讨一下
- 下一篇: 三星堆博物馆和三星堆遗址在一起吗