目錄
PHP陣列的分類" >PHP陣列的分類
#二關於關聯數組與索引數組" >#二關於關聯數組與索引數組
数组的声明方式" >数组的声明方式
数组元素的读取" >数组元素的读取
多维数组" >多维数组
PHP超全局数组" >PHP超全局数组
首頁 後端開發 php教程 PHP數組實用基礎知識

PHP數組實用基礎知識

Aug 04, 2017 pm 04:49 PM
php 基礎知識 實用

 

#一、PHP陣列基礎部分
################################################################################################################################## #######

 

PHP陣列的分類


依照下標的不同,PHP數組分為關聯數組和索引數組;
索引數組:下標從0開始,依次增長
關聯數組:下標為字串格式,每個下標字串與陣列的值一一關聯對應(類似物件的鍵值對)

程式碼示範:


$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,"hahah"=>9);
var_dump($arr3);
登入後複製

 

#二關於關聯數組與索引數組








#1、陣列中,可以同時存在索引陣列與關聯數組。

array(1,2,3,"one"=>4); ########## #########2、陣列中,所有的索引數組,若不加指定,會去掉關聯項,預設增長(即,關聯數組不佔索引位);#########array(1,2,"one"=>3, 4,5);//1,2,4,5的索引--->0/1/2/3######### #########3、如果,關聯數組的key,是純十進制整數字串,#########則會將此數字轉為索引數組的索引值;("10.0"/"08"等格式,仍然是關聯數組,不轉為索引)#########array(1,2,"one"=>3,"9"=>4,"010"=>5);//1,2 ,4的索引--->0/1/9######### ##########4、如果,手動指定關聯數組的key,索引數組的下標,如果與前面已有的key或下標重複,則後制定的值會覆寫先前的值;#########array(1,"one"=>2,0=>5," one"=>6);--->列印數組,0=>5,"one"=>6######### #########5、如果手動指定索引數組下標,則後續自增長下標,會依照先前下標最大值,依序增長。 #########array(1,2,7=>3,4);--->1,2,3,4的下標--->0/1/7/ 8######### ####

数组的声明方式


1、直接赋值声明
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
var_dump($arr);

2、[]字面量声明(PHP5.4版本之后能用)
$arr = [1,2,3,4,"one"=>5,6];
var_dump($arr);

3、Array()声明 没有new关键字
$arr = array(1,2,3,4,5);
var_dump($arr);

数组元素的读取


PHP中,数组支持[]和{}读取下标。

多维数组

①数组的一个值,依然是一个数组,我们称这种数组为多维数组;
②多维数组,不要求所有的项都是数组,可以是数组与普通值的混合;
③多维数组,也不要求每个子数组的个数限制,可以是任意的长度。

使用多维数组,一定要注意,数组中分隔用逗号!
原则上,多维数组一般不超过3层使用!

三维数组代码演示如下:


$H51701 = array(
"group1"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"李四","age"=>15,"sex"=>"男"),
array("name"=>"王二","age"=>13,"sex"=>"男")
),
"group2"=>array(
array("name"=>"张三","age"=>15,"sex"=>"男"),
array("name"=>"李四","age"=>15,"sex"=>"男"),
array("name"=>"王二","age"=>14,"sex"=>"男")
),
"group3"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"李四","age"=>18,"sex"=>"男"),
array("name"=>"王二","age"=>24,"sex"=>"男")
),
);
var_dump($H51701);
登入後複製

二、数组遍历

1、使用for循环遍历数组
count($arr);用于统计数组元素的个数

for循环只能用于遍历,纯索引数组!
如果存在关联数组,count统计时会统计两种数组的总个数,使用for循环遍历混合数组,导致数组越界!

代码如下:


 $arr = array(1,2,3,"one"=>4,5,6,7);
 $num = count($arr);
 echo"数组元素的个数{$num}<br/>";
 for($i=0;$i<$num;$i++){
 echo "{$i}==>{$arr[$i]}<br/>";
 }
登入後複製

2、forEach循环遍历数组
foreach可以遍历任何类型的数组!

代码如下:


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

下面我们来做一个数组遍历的小练习~看代码~


 $arr = array(
"group1"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"李四","age"=>12,"sex"=>"男"),
array("name"=>"王二","age"=>18,"sex"=>"男")
),
"group2"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"李四","age"=>16,"sex"=>"男"),
array("name"=>"王二","age"=>19,"sex"=>"男")
),
"group3"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"李四","age"=>12,"sex"=>"男"),
array("name"=>"王二","age"=>13,"sex"=>"男")
),
);

foreach($arr as $key=>$value){
echo "{$key}<br/>"; 
foreach($value as $key1=>$value1){
echo "第".($key1+1)."个同学<br/>";
foreach($value1 as $key2=>$value2){
echo "{$key2}==>{$value2}<br/>";
}
echo"<br/>";
}
echo"----------------------<br/>";
}
登入後複製

3、使用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。

4、使用list()/each()/while()配合遍历数组※※※


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

!!!数组使用each()遍历完一遍后,指针使用处于最后一位的下一位,即再用each(),始终返回false;
如果还需使用,需用reset($arr);函数,重置数组指针。

$arr = [1,2,3,4];
list($a,$b,$c,$d) = $arr;
echo "a-->{$a}
";

echo "b-->{$b}
";

echo "c-->{$c}
";

echo "d-->{$d}
";

while($a = each($arr))

①each($arr)返回数组或false;
②把数组或false赋值给$a;
③while判断$a如果是数组,继续执行下一位;
如果$a是false,终止循环。


while($a = each($arr)){
echo "{$a[0]}-->{$a[1]}<br>";
echo "{$a[&#39;key&#39;]}-->{$a[&#39;value&#39;]}<br>";
}

while(true){
$a = each($arr);
if($a){
echo "{$a[0]}-->{$a[1]}<br>";
echo "{$a[&#39;key&#39;]}-->{$a[&#39;value&#39;]}<br>";
}else{
break;
}
}

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

5、使用数组指针遍历数组

①next:将数组指针,后移一位,并返回后一位的值,没有返回false
②prev:将数组指针,前移一位,并返回前一位的值,没有返回false
③end:将数组指针,移至最后一位,返回最后一位的值,空数组返回false
④reset:将数组指针,恢复到第一位,并返回第一位的值,空数组返回false
⑤key:返回当前指针所在位的键;
⑥current:返回当前指针所在位的键;


$arr = [1,2,3,4,"one"=>5];
while(true){
echo key($arr);
echo "--";
echo current($arr);
echo "<br>";
if(!next($arr)){
break;
}
}
reset($arr);
do{
echo key($arr);
echo "--";
echo current($arr);
echo "<br>";
}while(next($arr));
reset($arr);
登入後複製

三、超全局数组


超全局数组,超全局变量,预定义数组,预定义变量——说的都是它。

PHP给我们提供了一组包含强大功能的超全局数组,可以在任何地方,任何作用域不需声明,直接使用!不受任何作用域限制。


PHP超全局数组

1、服务器变量: $_SERVER
  2、环境变量:$_ENV
  3、HTTP GET变量:$_GET
  4、HHTP POST变量:$_POST
  5、request变量:$_REQUEST
  6、HTTP文件上传变量:$_FILES
  7、HTTP Cookies:$_COOKIE
  8、Session变量:$_SESSION
  9、Global变量:$GLOBALS

1、服务器变量: $_SERVER
var_dump($_SERVER);
echo ($_SERVER{'HTTP_USER_AGENT'});

2、环境变量:$_ENV
将系统环境变量,转变为PHP中的数组,就是$_ENV;

PHP默认是关闭此全局数组的。如果需要使用,
需修改php.ini文件中的variables_order = "GPSC",
改为variables_order = "EGPSC";

但是,修改后会有系统性能损失,港方并不推荐使用。
可以使用getenv()函数取代全局变量,取出每个系统环境变量的值。

phpinof();函数,包含了有关PHP的各种信息,其实environment板块就是系统环境的变量,可以使用getevn()函数取出其中的值;

3、HTTP GET变量:$_GET
获取前台通过get方式提交的数据


if(isset($_GET["sybmit"]&&isset($_GET["pwd"]))){
if($_GET["username"]=="111"&&$_GET["pwd"]=="111"){
echo "Get登录成功!";
}else{
echo "Get登录失败!";
}
}
登入後複製

4、HHTP POST变量:$_POST
获取前台通过post方式提交的数据


if(isset($_POST["sybmit"])){
if($_POST["username"]=="111"&&$_POST["pwd"]=="111"){
echo "POST登录成功!";
}else{
echo "POST登录失败!";
}
}
登入後複製

5、request变量:$_REQUEST
包含了$_GET,$_POST和$_COOKIE的数组
由于request同时包含get和post,可能导致get与post的键冲突,并且频率也不高。所以,并不使用request。
var_dump($_REQUEST);

6、HTTP文件上传变量:$_FILES
通过HTTP POST方式上传到当前脚本的项目的数组。
var_dump($_FILES);

7、HTTP Cookies:$_COOKIE
取到页面中的Cookie信息
1 setcookie("cookie","haha");

2 $_COOKIE["hehe"] = "hehe";

3 var_dump($_COOKIE);


8、Session變數:$_SESSION
取到儲存在Session中的資訊。
session_start();
$_SESSION["haha"] = "haha";
var_dump($_SESSION);* /

9、Global變數:$GLOBALS
#$GLOBALS包含了上述8個全域數組,可以透過$GLOBALS["_SERVER"]取到$_SERVER
也可以透過$GLOBALS陣列追加下標。建立全域變量,可以在函數裡函數外隨意存取:$GLOBALS["name"] = "zhangsan";
var_dump($GLOBALS["_SERVER"]);

 

四、陣列功能
############################################ ###

1、返回数组所有的值,返回数组
var_dump(array_values($arr));

2、返回数组所有的键,返回数组
var_dump(array_keys($arr));

3、检测数组中是否包含某个值。返回真、假
参数:需要查询的值,数组,true(===)/false(===) 默认
var_dump(in_array("8",$arr,true));

4、交换数组中的键和值,返回新数组
var_dump(array_flip("8",$arr));

5、反转数组,返回新数组
参数:需要反转的数组
true:保留原有索引数组的下标与值的匹配。
false:只反转值,键不反转,默认
无论true/false,都不会影响关联数组,关联数组键,值永远是一对。
var_dump(array_reverse($arr,true));

6、统计数组元素个数
count($arr);

7、统计数组中,所有值出现的次数,返回一个新数组
新数组格式:键-->原数组的值(去重后的值)
值-->原数组对应的值出现的次数。
var_dump(array_count_values($arr));

8、移出数组中重复的值!
var_dump(array_unique($arr));

9、过滤数组中的每一个值:
①不传回调函数:过滤掉所有空值(0/""/null/false/"0"/[])
②传回调函数:需要给回调函数传递一个参数,判断参数是否符合要求,如果符合,return true;否则,return false。


var_dump(array_filter($arr,function($num){
if($num>4){
return true;
}else{
return false;
}
}));
登入後複製


通过回调函数,对数组的每一个值,进行处理操作。(直接修改原数组,并返回bool类型的是否成功)
执行时,会给回调函数传递两个参数,分别是数组的value,key,然后可以在毁掉函数中,对值和键进行处理。
但是,牵扯到修改值的时候,必须要传递地址&!!!!
$fruits = array("d" => "lemon","a" => "orange","b" => "banana","c" => "apple");


 var_dump(array_walk($fruits,function(&$item,$key){
 echo "{$key}-->{$item}<br>";
 $item .= $key;
 }));
 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];


 var_dump(array_walk($fruits,function(&$item,$key){
 echo "{$key}-->{$item}<br>";
 $item .= $key;
 }));
 var_dump($fruits);
登入後複製
登入後複製

 

五、数组函数

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)
傳回值:陣列(被刪除的部分)
參數:

##1、數組的位址,會修改原始數組#########2、從第幾位開始刪除#########3、刪除的長度,不填預設到結尾##### ####4、不填,預設為刪除,填,用填的部分取代刪掉的部分;##########$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();###將函數打亂重新排序######### #########好啦~~~今天的內容先分享到這裡,小女子小菜鳥一隻,還請各位園友多多指教·喜歡就點個贊吧~感謝支持! ######### ###### ####### #############

以上是PHP數組實用基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles