【PHP】最詳細PHP從入門到精通(三)——PHP中的數組

 PHP從入門到精通php

之PHP中的數組前端

   各位開發者朋友你們好,連接上次更新,咱們PHP的學習也更深了一層,本次博主給你們帶來PHP數組的數組實例詳解的相關資料。數組分爲數組數值數值,關聯數組,多維數組,本文介紹的很是不錯具備參考借鑑價值,但願給廣大開發者予以參考。感謝你們的持續關注。數組

   下面博主將詳細介紹PHP數組的知識講解:瀏覽器

  

PHP數組的分類

按照下標的不一樣,PHP數組分爲關聯數組與索引數組:

索引數組:下標從0開始,依次增加;
關聯數組: 下標爲字符串格式,每一個下標字符串與數組的值一一關聯對應。(有點像對象的鍵值對)服務器

 

關於關聯數組和索引數組:cookie

一、數組中,能夠同時存在索引數組與關聯數組;
array(1,2,3,"one"=>4);

二、數組中,全部的索引數組,若是不加指定,會去掉關聯項,默認增加(即,關聯數組不佔索引位);
array(1,2,"one"=>3,4,5); //1,2,4,5的索引-->0/1/2/3

三、若是,關聯數組的key,是純十進制整數字符串,則會將此數字轉爲索引數組的索引值;("10.0"/"08"等格式,仍然是關聯數組,不轉爲索引)
array(1,2,"one"=>3,"9"=>4,"010"=>5);// 1,2,4的索引-->0/1/9

四、 手動指定關聯數組的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/8session

實例展現:函數

$arr1 = array(1,2,3,4,5,6,7); // 索引數組
var_dump($arr1);

$arr2 = array("one"=>1,"two"=>2,"three"=>3); // 關聯數組
var_dump($arr2);

$arr3 = array(1,"one"=>2,3,5=>4,5,6,"10.0"=>7,"08"=>8,"08"=>10,"haha"=>9);
var_dump($arr3);post

 

數組的聲明方式

一、直接賦值聲明:性能

 $arr[] = 1;
  $arr[] = 1;
  $arr[8] = 1;
  $arr[] = 1;
  $arr[4] = 1;
  $arr[] = 1;
  var_dump($arr);

二、[]字面量聲明(PHP5.4版本以後能用)

$arr = [1,2,3,4,"one"=>54,6];
var_dump($arr);

三、 Array()聲明 木有new關鍵字

$arr = array(1,2,3,4,5);
var_dump($arr);

 

數組元素的讀取

PHP中,數組支持[]和{}讀取下標。

$arr = [1,2,3,"one"=>4];
echo $arr[0];
echo $arr["one"];
echo $arr{"one"};
echo $arr{0};

 

多維數組

數組的一個值,依然是一個數組,咱們稱這種數組爲多維數組;


多維數組,不要求全部的項都是數組,能夠是數組與普通值的混合;
多維數組,也不要求每一個子數組的個數限制,能夠是任意的長度;

使用多維數組必定要注意,數組中分隔用逗號!!
原則上,多維數組通常不超過3層使用。

實例展現:

$h51701 = array(
"group1"=>array(
array("name"=>"張三","age"=>14,"sex"=>"男"),
array("name"=>"張三","age"=>14),
array("name"=>"張三"),
"groupName"=>"一組"
),
"group2"=>array(
array("name"=>"張三","age"=>14,"sex"=>"男"),
array("name"=>"張三","age"=>14,"sex"=>"男"),
array("name"=>"張三","age"=>14,"sex"=>"男")
),
"group3"=>array(
array("name"=>"張三","age"=>14,"sex"=>"男"),
array("name"=>"張三","age"=>14,"sex"=>"男"),
array("name"=>"張三","age"=>14,"sex"=>"男")
)
);
var_dump($h51701);

 

 

數組的遍歷

一、使用for循環遍歷數組
conut($arr);用於統計數組元素的個數。

for循環只能用於遍歷,純索引數組!!!!
若是存在關聯數組,count統計時會統計兩種數組的總個數,使用for循環遍歷混合數組,致使數組越界!!

$arr = array(1,2,3,5,6,7);
$num = count($arr);//count最好放到for外面,可讓函數只執行一次
echo "數組元素的個數{$num}<br/>";
for($i=0;$i<$num;$i++){
echo "{$i}==>{$arr[$i]}<br/>";
}

 

二、forEach循環遍歷數組
foreach能夠遍歷任何類型的數組!!!
寫法以下:

$arr = array(1,2,3,"one"=>4,5,6,7);
    foreach($arr as $item){
        echo "{$item}<br>";
    }
    foreach($arr as $key => $item){
        echo "{$key}==>{$item}<br>";
    }

三、使用list()、each()、while()遍歷數組

list():用於將數組的每個值,賦值給list函數的每個參數。(list函數的參數,必須小於等於數組的元素個數);

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()配合遍歷數組:

while(list($key,$value) = each($arr)){
         echo "{$key}-->{$value}<br>";     
      }
      reset($arr);

!!!!數組使用each()遍歷完一遍後,指針使用處於最後一位的下一位;即再用each(),始終返回false;
若是還需使用,需用reset($arr);函數,重置數組指針;

四、 使用數組指針遍歷數組
① next:將數組指針,後移一位。並返回後一位的值;沒有返回false
② prev:將數組指針,前移一位。並返回前一位的值;沒有返回false
③ end: 將數組指針,移至最後一位,返回最後一位的值;空數組返回false
④ reset:將數組指針,恢復到第一位。並返回第一位的值;空數組返回false
⑤ key: 返回當前指針所在位的鍵;超出返回null。
⑥ current:返回當前指針所在位的值;超出返回false。

$arr = [1,2,3,""=>false,"one"=>5];
     while(true){
         echo key($arr);
         echo "--";
         echo current($arr);
        echo "<br>";
        //key===null用於排除數組包含空值,致使next返回值爲false的狀況;
        if(!next($arr)&&key($arr)===null){
            break;
        }
     }
     reset($arr);
     do{
         echo key($arr);
         echo "--";
         echo current($arr);
        echo "<br>";
     }while(next($arr));
     reset($arr);

 

超全局數組

超全局數組、超全局變量、預約義數組、預約義變量說的都是他。

PHP給我IM恩提供了一組包含強大功能的超全局數組,能夠在任何地方、任何做用域不須要聲明,直接使用!!不受任何做用域限制。
一、 服務器變量: $_SERVER;
$_SERVER返回包含瀏覽器頭信息、路徑、腳本以及服務器系統等各類信息;

如圖所示:


二、 環境變量:$_ENV;
$_ENV將系統環境變量,轉變爲PHP中的數組,就是$_ENV;
PHP默認是關閉此全局數組的。若是須要使用,需修改php.ini文件中的variables_order="GPSC",改成variables_order="EGPSC"便可使用,不然爲空;
可是,修改後會形成系統性能損失,官方並不推薦使用。
可使用getenv()函數取代全局變量,取出每一個系統環境變量的值。

phpinfo():函數,包含PHP的各類信息,其中environment模塊就是系統環境變量,可使用getevn()取出其中的每個值;

三、 HTTP GET變量:$_GET;
$_GET獲取前臺經過get方式提交的數據;


四、 HHTP POST變量:$_POST;
$_POST獲取前臺經過post方式提交的數據;
五、 request變量:$_REQUEST;
默認狀況下包含了 $_GET,$_POST 和 $_COOKIE 的數組。
因爲$_REQUEST同時包含get和post,可能致使get和post的鍵衝突,而且效率也不高,全部,並不使用request。
六、 HTTP文件上傳變量:$_FILES;
經過 HTTP POST 方式上傳到當前腳本的項目的數組。 (後續細講)
七、 HTTP Cookies:$_COOKIE;
獲取當前頁面cookie信息;(能夠手動setcookie("",""),可賦值);
八、 Session變量:$_SESSION;
$_SESSION:取到保存在session中的信息。
!!!!!!$_SESSION很經常使用,很是重要!!!!!!!!
九、 Global變量:$GLOBALS;
$GLOBALS包含了上述全部全局數組,能夠經過$GLOBALS["$_SERVER"]取到$_SERVER;

還能夠經過給$GLOBALS數組追加下標,建立全局變量,能夠在函數裏函數外隨意訪問:$GLOBALS["name"]="zhangsan";

 

實例展現:

//一、服務器變量:$_SERVER;
//var_dump($_SERVER);
//var_dump($_SERVER['HTTP_USER_AGENT']);

//var_dump($_ENV);
//phpinfo();

//var_dump($_GET);
if(isset($_GET["submit"])){
if($_GET["username"]==$_GET["pwd"]){echo "GET登錄成功";}
else{echo "GET登錄失敗";}
}
if(isset($_POST["submit"])){
if($_POST["username"]==$_POST["pwd"]){echo "POST登錄成功";}
else{echo "POST登錄失敗";}
}

//var_dump($_REQUEST);

//var_dump($_COOKIE);

//session_start();
//$_SESSION["haha"]="hehe";
//var_dump($_SESSION);

//var_dump($GLOBALS["$_SERVER"]);

var_dump($http_response_header);
?>
<form action="" method="post" autocomplete="on">
用戶名:
<input type="text" name="username" /><br />
密&nbsp;碼:
<input type="password" name="pwd"/><br />
<input type="submit" name="submit" value="登陸" />
</form>

 

本期分享就到這裏,咱們下期再見。以爲內容不錯的小夥伴請點推薦,歡迎你們在評論下方評論區與博主互動,謝謝你們!

未完,待續。。。

 更多詳細內容,敬請關注 Q的前端世界的技術博客。

相關文章
相關標籤/搜索