數組是特殊的變量,它能夠同時保存一個以上的值。php
***關鍵詞:數組基礎、數組遍歷、超全局數組、數組功能、數組函數。算法
下面來和你們分享一下有關PHP的數組基礎知識,但願對你PHP的學習有所幫助~數組
1、PHP數組基礎部分 |
按照下標的不一樣,PHP數組分爲關聯數組和索引數組;
索引數組:下標從0開始,依次增加
關聯數組:下標爲字符串格式,每一個下標字符串與數組的值一一關聯對應(相似對象的鍵值對)服務器
代碼演示:cookie
1 $arr1 = array(1,2,3,4,5,6,7);//索引數組 2 var_dump($arr1); 3 4 $arr2 = array("one"=>1,"two"=>2,"three"=>3);//關聯數組 5 var_dump($arr2); 6 7 $arr3 = array(1,"one"=>2,3,5=>4,5,6,"10.0"=>7,"08"=>8,"08"=>10,"hahah"=>9); 8 var_dump($arr3);
一、數組中,能夠同時存在索引數組與關聯數組。
array(1,2,3,"one"=>4); session
二、數組中,全部的索引數組,若是不加指定,會去掉關聯項,默認增加(即,關聯數組不佔索引位);
array(1,2,"one"=>3,4,5);//1,2,4,5的索引--->0/1/2/3app
三、若是,關聯數組的key,是純十進制整數字符串,
則會將此數字轉爲索引數組的索引值;("10.0"/"08"等格式,仍然是關聯數組,不轉爲索引)
array(1,2,"one"=>3,"9"=>4,"010"=>5);//1,2,4的索引--->0/1/9ide
四、若是,手動指定關聯數組的key,索引數組的下標,若是與前面已有的key或下標重複,則後製定的值會覆蓋以前的值;
array(1,"one"=>2,0=>5,"one"=>6);--->打印數組,0=>5,"one"=>6函數
五、若是手動指定索引數組下標,則後續自增加下標,會按照以前下標最大值,依次增加。
array(1,2,7=>3,4);--->1,2,3,4的下標--->0/1/7/8post
一、直接賦值聲明
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
var_dump($arr);
二、[]字面量聲明(PHP5.4版本以後能用)
$arr = [1,2,3,4,"one"=>5,6];
var_dump($arr);
三、Array()聲明 沒有new關鍵字
$arr = array(1,2,3,4,5);
var_dump($arr);
PHP中,數組支持[]和{}讀取下標。
①數組的一個值,依然是一個數組,咱們稱這種數組爲多維數組;
②多維數組,不要求全部的項都是數組,能夠是數組與普通值的混合;
③多維數組,也不要求每一個子數組的個數限制,能夠是任意的長度。
使用多維數組,必定要注意,數組中分隔用逗號!
原則上,多維數組通常不超過3層使用!
三維數組代碼演示以下:
1 $H51701 = array( 2 "group1"=>array( 3 array("name"=>"張三","age"=>14,"sex"=>"男"), 4 array("name"=>"李四","age"=>15,"sex"=>"男"), 5 array("name"=>"王二","age"=>13,"sex"=>"男") 6 ), 7 "group2"=>array( 8 array("name"=>"張三","age"=>15,"sex"=>"男"), 9 array("name"=>"李四","age"=>15,"sex"=>"男"), 10 array("name"=>"王二","age"=>14,"sex"=>"男") 11 ), 12 "group3"=>array( 13 array("name"=>"張三","age"=>14,"sex"=>"男"), 14 array("name"=>"李四","age"=>18,"sex"=>"男"), 15 array("name"=>"王二","age"=>24,"sex"=>"男") 16 ), 17 ); 18 var_dump($H51701);
2、數組遍歷 |
一、使用for循環遍歷數組
count($arr);用於統計數組元素的個數
for循環只能用於遍歷,純索引數組!
若是存在關聯數組,count統計時會統計兩種數組的總個數,使用for循環遍歷混合數組,致使數組越界!
代碼以下:
1 $arr = array(1,2,3,"one"=>4,5,6,7); 2 $num = count($arr); 3 echo"數組元素的個數{$num}<br/>"; 4 for($i=0;$i<$num;$i++){ 5 echo "{$i}==>{$arr[$i]}<br/>"; 6 }
二、forEach循環遍歷數組
foreach能夠遍歷任何類型的數組!
代碼以下:
1 $arr = array(1,2,3,"one"=>4,5,6,7); 2 foreach($arr as $key=>$item){ 3 echo "{$key}==>{$item}<br/>"; 4 }
下面咱們來作一個數組遍歷的小練習~看代碼~
1 $arr = array( 2 "group1"=>array( 3 array("name"=>"張三","age"=>14,"sex"=>"男"), 4 array("name"=>"李四","age"=>12,"sex"=>"男"), 5 array("name"=>"王二","age"=>18,"sex"=>"男") 6 ), 7 "group2"=>array( 8 array("name"=>"張三","age"=>14,"sex"=>"男"), 9 array("name"=>"李四","age"=>16,"sex"=>"男"), 10 array("name"=>"王二","age"=>19,"sex"=>"男") 11 ), 12 "group3"=>array( 13 array("name"=>"張三","age"=>14,"sex"=>"男"), 14 array("name"=>"李四","age"=>12,"sex"=>"男"), 15 array("name"=>"王二","age"=>13,"sex"=>"男") 16 ), 17 ); 18 19 foreach($arr as $key=>$value){ 20 echo "{$key}<br/>"; 21 foreach($value as $key1=>$value1){ 22 echo "第".($key1+1)."個同窗<br/>"; 23 foreach($value1 as $key2=>$value2){ 24 echo "{$key2}==>{$value2}<br/>"; 25 } 26 echo"<br/>"; 27 } 28 echo"----------------------<br/>"; 29 }
三、使用list(),each(),while()遍歷數組
list():用於將數組的每個值,賦值給list函數的每個參數。(list函數的參數,必須<=數組的元素個數);
eg:list($a,$b,$c) = [1,2,3]; --->$a=1; $b=2; $c=3;
注意:
①list()在解析數組時,只解析索引數組;
②list能夠經過空參數,選擇性的解析數組的值;
list($a,,$b)=[1,2,3];-->$a=1;$b=3;
each():用於返回數組當前指針所在位的鍵值對!並將指針後移一位;
返回值:若是指針有下一位,返回一個數組。包含一個索引數組(0-鍵,1-值)和一個關聯數組("key"-鍵,"value"-值);
若是指針沒有下一位,返回false。
四、使用list()/each()/while()配合遍歷數組※※※
1 while(list($key,$value) = each($arr)){ 2 echo "{$key}-->{$value}<br>"; 3 } 4 reset($arr);
!!!數組使用each()遍歷完一遍後,指針使用處於最後一位的下一位,即再用each(),始終返回false;
若是還需使用,需用reset($arr);函數,重置數組指針。
$arr = [1,2,3,4];
list($a,$b,$c,$d) = $arr;
echo "a-->{$a}<br/>";
echo "b-->{$b}<br/>";
echo "c-->{$c}<br/>";
echo "d-->{$d}<br/>";
while($a = each($arr))
①each($arr)返回數組或false;
②把數組或false賦值給$a;
③while判斷$a若是是數組,繼續執行下一位;
若是$a是false,終止循環。
1 while($a = each($arr)){ 2 echo "{$a[0]}-->{$a[1]}<br>"; 3 echo "{$a['key']}-->{$a['value']}<br>"; 4 } 5 6 while(true){ 7 $a = each($arr); 8 if($a){ 9 echo "{$a[0]}-->{$a[1]}<br>"; 10 echo "{$a['key']}-->{$a['value']}<br>"; 11 }else{ 12 break; 13 } 14 } 15 16 while(list($key,$value) = each($arr)){ 17 echo "{$key}-->{$value}<br>"; 18 } 19 reset($arr);
五、使用數組指針遍歷數組
①next:將數組指針,後移一位,並返回後一位的值,沒有返回false
②prev:將數組指針,前移一位,並返回前一位的值,沒有返回false
③end:將數組指針,移至最後一位,返回最後一位的值,空數組返回false
④reset:將數組指針,恢復到第一位,並返回第一位的值,空數組返回false
⑤key:返回當前指針所在位的鍵;
⑥current:返回當前指針所在位的鍵;
1 $arr = [1,2,3,4,"one"=>5]; 2 while(true){ 3 echo key($arr); 4 echo "--"; 5 echo current($arr); 6 echo "<br>"; 7 if(!next($arr)){ 8 break; 9 } 10 } 11 reset($arr); 12 do{ 13 echo key($arr); 14 echo "--"; 15 echo current($arr); 16 echo "<br>"; 17 }while(next($arr)); 18 reset($arr);
3、超全局數組 |
超全局數組,超全局變量,預約義數組,預約義變量——說的都是它。
PHP給咱們提供了一組包含強大功能的超全局數組,能夠在任何地方,任何做用域不需聲明,直接使用!不受任何做用域限制。
一、服務器變量: $_SERVER
二、環境變量:$_ENV
三、HTTP GET變量:$_GET
四、HHTP POST變量:$_POST
五、request變量:$_REQUEST
六、HTTP文件上傳變量:$_FILES
七、HTTP Cookies:$_COOKIE
八、Session變量:$_SESSION
九、Global變量:$GLOBALS
一、服務器變量: $_SERVER
var_dump($_SERVER);
echo ($_SERVER{'HTTP_USER_AGENT'});
二、環境變量:$_ENV
將系統環境變量,轉變爲PHP中的數組,就是$_ENV;
PHP默認是關閉此全局數組的。若是須要使用,
需修改php.ini文件中的variables_order = "GPSC",
改成variables_order = "EGPSC";
可是,修改後會有系統性能損失,港方並不推薦使用。
可使用getenv()函數取代全局變量,取出每一個系統環境變量的值。
phpinof();函數,包含了有關PHP的各類信息,其實environment板塊就是系統環境的變量,可使用getevn()函數取出其中的值;
三、HTTP GET變量:$_GET
獲取前臺經過get方式提交的數據
1 if(isset($_GET["sybmit"]&&isset($_GET["pwd"]))){ 2 if($_GET["username"]=="111"&&$_GET["pwd"]=="111"){ 3 echo "Get登陸成功!"; 4 }else{ 5 echo "Get登陸失敗!"; 6 } 7 }
四、HHTP POST變量:$_POST
獲取前臺經過post方式提交的數據
1 if(isset($_POST["sybmit"])){ 2 if($_POST["username"]=="111"&&$_POST["pwd"]=="111"){ 3 echo "POST登陸成功!"; 4 }else{ 5 echo "POST登陸失敗!"; 6 } 7 }
五、request變量:$_REQUEST
包含了$_GET,$_POST和$_COOKIE的數組
因爲request同時包含get和post,可能致使get與post的鍵衝突,而且頻率也不高。因此,並不使用request。
var_dump($_REQUEST);
六、HTTP文件上傳變量:$_FILES
經過HTTP POST方式上傳到當前腳本的項目的數組。
var_dump($_FILES);
七、HTTP Cookies:$_COOKIE
取到頁面中的Cookie信息
1 setcookie("cookie","haha");
2 $_COOKIE["hehe"] = "hehe";
3 var_dump($_COOKIE);
八、Session變量:$_SESSION
取到保存在Session中的信息。
session_start();
$_SESSION["haha"] = "haha";
var_dump($_SESSION);*/
九、Global變量:$GLOBALS
$GLOBALS包含了上述8個全局數組,能夠經過$GLOBALS["_SERVER"]取到$_SERVER
還能夠經過給$GLOBALS數組追加下標。建立全局變量,能夠在函數裏函數外隨意訪問:$GLOBALS["name"] = "zhangsan";
var_dump($GLOBALS["_SERVER"]);
4、數組功能 |
一、返回數組全部的值,返回數組
var_dump(array_values($arr));
二、返回數組全部的鍵,返回數組
var_dump(array_keys($arr));
三、檢測數組中是否包含某個值。返回真、假
參數:須要查詢的值,數組,true(===)/false(===) 默認
var_dump(in_array("8",$arr,true));
四、交換數組中的鍵和值,返回新數組
var_dump(array_flip("8",$arr));
五、反轉數組,返回新數組
參數:須要反轉的數組
true:保留原有索引數組的下標與值的匹配。
false:只反轉值,鍵不反轉,默認
不管true/false,都不會影響關聯數組,關聯數組鍵,值永遠是一對。
var_dump(array_reverse($arr,true));
六、統計數組元素個數
count($arr);
七、統計數組中,全部值出現的次數,返回一個新數組
新數組格式:鍵-->原數組的值(去重後的值)
值-->原數組對應的值出現的次數。
var_dump(array_count_values($arr));
八、移出數組中重複的值!
var_dump(array_unique($arr));
九、過濾數組中的每個值:
①不傳回調函數:過濾掉全部空值(0/""/null/false/"0"/[])
②傳回調函數:須要給回調函數傳遞一個參數,判斷參數是否符合要求,若是符合,return true;不然,return false。
1 var_dump(array_filter($arr,function($num){ 2 if($num>4){ 3 return true; 4 }else{ 5 return false; 6 } 7 }));
經過回調函數,對數組的每個值,進行處理操做。(直接修改原數組,並返回bool類型的是否成功)
執行時,會給回調函數傳遞兩個參數,分別是數組的value,key,而後能夠在毀掉函數中,對值和鍵進行處理。
可是,牽扯到修改值的時候,必需要傳遞地址&!!!!
$fruits = array("d" => "lemon","a" => "orange","b" => "banana","c" => "apple");
1 var_dump(array_walk($fruits,function(&$item,$key){ 2 echo "{$key}-->{$item}<br>"; 3 $item .= $key; 4 })); 5 var_dump($fruits);
將數組的每一個值交由回調函數進行映射處理
array_map():第一個參數,是一個回調函數。第二個參數起,是>=1個數組。
有幾個數組,能夠給回調函數傳幾個參數,,表示每一個數組的一個value;
能夠對value進行處理,處理完之後經過return返回,那麼新數組的對應的值就是你return回去的值。
【array_map與array_walk的異同】
相同點:都能遍歷數組,經過回調函數,從新處理數組的每個值;
不一樣點:
①walk只能傳一個數組,回調函數接收這個數組的值和鍵;
map能夠傳多個數組,回調函數接收每一個數組的值;
②walk直接修改原數組,而map不修改原數組,將新數組返回;
③walk給回調函數傳遞一個其他參數,map只能傳數組的值;
④處理方式上,walk若是須要改掉原數組的值,需在回調函數中傳遞地址,直接修改變量的值;
而map,是經過將新的值,用return返回,便可修改新數組的值。
$a = [1,2,3,4,5];
$b = [1,2,3,4,5];
1 var_dump(array_walk($fruits,function(&$item,$key){ 2 echo "{$key}-->{$item}<br>"; 3 $item .= $key; 4 })); 5 var_dump($fruits);
5、數組函數 |
sort -- 對數組排序(升序)
var_dump(sort($arr));
rsort--對數組逆向排序(降序)
usort--使用用戶自定義的比較函數對數組中的值進行排序
asort--對數組進行排序並保持索引關係(關聯數組排序)
arsort--對數組進行逆向排序並保持索引關係
uasort--用戶自定義的比較函數對數組進行排序並保持索引關聯
ksort--對數組按照鍵名排序
krsort--對數組按照鍵名逆向排序
uksort--使用用戶自定義的比較函數對數組中的鍵名進行排序
natsort--用「天然排序」算法對數組排序
natcasesort--用「天然排序」算法對數組不區分大小寫字母排序
array_multisort -- 對多個數組或多維數組進行排序
第一個參數:第一個數組,必選
第二個參數:SORT_DESC;SORT_ASC(升序降序);
第三個參數:SORT_STRING/SORT_NUMERIC(按照字符串仍是數字排序)
再以後是多個數組
排序規則:先排第一個數組,後面的數組會根據和第一個數組的對應關係,一列一列的排序;
若是多個數組多個數組排序,排序的數組長度要相等,不然報警告;
array_slice($array, $offset)
第一個參數:數組,必須;
第二個參數:從第幾位開始截,負數表示從右往左數(按照數組的順序ps:包括關聯數組,而非下標)
第三個參數:截取的長度,可選,默認截取到最後
第四個參數:bool類型的參數,默認爲false,索引從新排序,true保持索引關聯
$arr1 = array_slice($arr, 2,5,TRUE);
array_splice($offset)
返回值:數組(被刪掉的部分)
參數:
一、數組的地址,會修改原數組
二、從第幾位開始刪
三、刪除的長度,不填默認到結尾
四、不填,默認爲刪除,填,用填的部分替換刪掉的部分;
$arr1 = array_splice($arr, 2,5,[1,2,3,4]);
array_combine($keys, $values);建立一個數組,用一個數組的值做爲鍵名,另外一個數組的值做爲值;
array_combine($keys'做爲鍵的數組', $values'做爲值的數組');
兩個數組的長度必須一致,不然報警告
array_merge($array1);合併一個或多個數組
合併多個數組,將後面的數組拼接在前面數組的後面
若是多個數組中存在多個同名的關聯鍵,則後面的會覆蓋前面的
array_intersect($array1, $array2);兩個數組取交集
多個數組取交集,結果會保留第一個數組的鍵值關聯匹配
array_diff($array1, $array2);多個數組取差集;
取出多個數組中,在第一個數組中包含,可是在其餘數組中不包含的值,保留第一個數組的鍵值關聯;
array_pop();
刪除數組最後一個值;返回刪除的值;
array_push($var);
數組的最後插入一個或多個值;返回處理以後元素的個數
array_shift();
刪除數組第一個值;返回刪除的值;
array_unshift($var);
數組的開頭插入一個或多個值;返回處理以後元素的個數
array_rand($input);隨機抽取數組中的一個到多個鍵名!第二個參數爲空,表示抽一個,傳入數字n表示抽n個
shuffle();將函數打亂從新排序
好啦~~~今天的內容先分享到這裏,小女子小菜鳥一隻,還請各位園友多多指教·喜歡就點個贊吧~感謝支持!