[后端代码审计] PHP 数组知识汇总

前言

​ PHP(Hypertext Preprocessor)是一种开源的脚本语言,主要用于Web开发,特别是服务器端编程。是学习网络安全需要掌握的一门语言。

​ PHP数组是一种数据结构,用于存储一系列有序的数据,可以包含各种类型的值,如数字、字符串、布尔值、甚至是其他数组。

1. 数组基础

1.1 数组概念

​ 数组是一种数据结构,可以存储多个值。在 PHP 中,数组可以分为索引数组关联数组。下面是数组的特点:

  • 使用键值对的方式来存储数据。
  • 键(key):变量的编号;值(value):变量的值。
  • 数组中的元素可以是任意类型的数据对象

1.2 索引数组

定义: 索引数组使用整数索引来访问元素。索引从 0 开始,依次递增。

示例:

假设你要保存班级的学生姓名:

$students = array("张三", "李四", "王五");
echo $students[0]; // 输出 "张三"

解释: $students[0] 访问数组中第一个元素“张三”。

另一种创建索引数组的方法:

$students = ["张三", "李四", "王五"];

1.3 关联数组

定义: 关联数组使用字符串键来访问元素。

示例:

假设你要保存一个人的信息,如姓名、年龄和城市:

$person = array(
    "name" => "李华",
    "age" => 28,
    "city" => "上海"
);
echo $person["name"]; // 输出 "李华"

解释: $person["name"] 访问关联数组中键为“name”的值“李华”。

另一种创建关联数组的方法:

$person = [
    "name" => "李华",
    "age" => 28,
    "city" => "上海"
];

1.4 多维数组

数组中的元素可以是任何类型的数据,数组中的元素也可以是数组。

示例:

假设有一个班级,里面有四个学生用户。

$ns_class = array($stu1,$stu2,$stu3,$stu4);

echo "<pre>";
print_r($ns_class);

解释:print_recho相似,在输出布尔类型变量时,True为1,False无。

2. 数组函数

2.1 count()

功能: 返回数组中元素的数量

示例:

$fruits = ["苹果", "香蕉", "橙子"];
echo count($fruits); // 输出 3

解释: count($fruits) 返回数组 $fruits 中的元素数量,即 3。

2.2 array_merge()

功能: 合并两个或多个数组。

示例:

$array1 = ["a", "b"];
$array2 = ["c", "d"];
$result = array_merge($array1, $array2);
print_r($result); // 输出 Array ( [0] => a [1] => b [2] => c [3] => d )

解释: array_merge() 合并了 $array1$array2,结果是一个包含所有元素的新数组。

2.3 array_keys()

功能: 返回数组中所有的

示例:

$person = [
    "name" => "李华",
    "age" => 28,
    "city" => "上海"
];
$keys = array_keys($person);
print_r($keys); // 输出 Array ( [0] => name [1] => age [2] => city )

解释: array_keys($person) 返回关联数组 $person 中所有的键。

2.4 array_values()

功能: 返回数组中所有的

示例:

$values = array_values($person);
print_r($values); // 输出 Array ( [0] => 李华 [1] => 28 [2] => 上海 )

解释: array_values($person) 返回关联数组 $person 中所有的值。

2.5 in_array()

功能: 检查数组中是否存在某个值。

示例:

$fruits = ["苹果", "香蕉", "橙子"];
if (in_array("香蕉", $fruits)) {
    echo "香蕉存在于数组中";
}

解释: in_array("香蕉", $fruits) 检查“香蕉”是否存在于 $fruits 数组中,如果存在,输出相关信息。

3. 数组遍历

3.1 for循环遍历

使用for循环可以遍历数组,但是这种方法依赖于数组中key自然数规律,具有局限性,只能遍历索引数组

示例:

for($a = 0;$a < count($word); $a++){
	echo $word[$a]."<br />";
}

3.2 foreach遍历

foreach是专门用来遍历数组的,foreach是一种循环,不需要额外的计时器。

示例:

foreach($variable as $key => $value){
   #执行代码
}

3.3 遍历索引数组

示例:

$fruits = ["苹果", "香蕉", "橙子"];
foreach ($fruits as $fruit) {
    echo $fruit . "<br>";
}

解释: foreach 循环遍历索引数组 $fruits 的每个元素,并逐一输出。

3.4 遍历关联数组

示例:

$person = [
    "name" => "李华",
    "age" => 28,
    "city" => "上海"
];
foreach ($person as $key => $value) {
    echo "$key: $value<br>";
}

解释: foreach 循环遍历关联数组 $person 的每个键值对,输出键和值。

4. 数组排序

4.1 sort()

功能:索引数组进行升序排序。

示例:

$numbers = [3, 1, 4, 1, 5];
sort($numbers);
print_r($numbers); // 输出 Array ( [0] => 1 [1] => 1 [2] => 3 [3] => 4 [4] => 5 )

解释: sort() 函数对 $numbers 数组进行升序排序。

4.2 asort()

功能: 对关联数组进行升序排序,保持键值关系

示例:

$person = [
    "John" => 25,
    "Doe" => 30,
    "Jane" => 22
];
asort($person);
print_r($person); // 输出 Array ( [Jane] => 22 [John] => 25 [Doe] => 30 )

解释: asort()$person 数组按值升序排序,但保持键值对关系。

4.3 ksort()

功能: 按键对关联数组进行升序排序。

示例:

$person = [
    "John" => 25,
    "Doe" => 30,
    "Jane" => 22
];
ksort($person);
print_r($person); // 输出 Array ( [Doe] => 30 [Jane] => 22 [John] => 25 )

解释: ksort()$person 数组按键升序排序。

5. 预定义超全局数组变量

5.1 概述

预定义:PHP已经定义好的,已经存在的,可以直接拿来使用。

超全局:超级全局变量,作用域是超全局,可以在脚本的任何地方访问和使用,包括函数内部和外部,这些数组在整个脚本中都可以访问,无需通过 global 关键字。

数组作用
$_GET通过URL参数(query string)传递给当前脚本的变量的数组。
注意:该数组不仅仅对methodGET的请求生效,而是会针对所有带query string的请求。
$_POST当HTTP POST请求的Content-Typeapplication/x-www-form-urlencodedmultipart/form-data时,会将变量以关联数组形式传入当前脚本。
$GLOBALS关联数组array,包含当前脚本定义成全局范围的所有变量的引用。数组的键就是变量的名字。
$_SERVER服务器和执行环境信息
$_FILES通过HTTP POST方式上传到当前脚本的项目的数组。
$_COOKIE通过HTTP Cookies方式传递给当前脚本的变量的数组。
$_SESSION当前脚本可用SESSION变量的数组。
$_REQUEST默认情况下包含了$_GET$_POST$_COOKIE数组。

5.2 $_GET

功能: 存储通过 URL 传递的查询参数,GET传参的参数名做数组的key,参数值做数组的value。

示例:

假设你有一个 URL,如 example.com/index.php?name=张三&age=28

// index.php
echo $_GET['name']; // 输出 "张三"
echo $_GET['age'];  // 输出 "28"

解释: $_GET 数组获取 URL 查询参数 nameage 的值。

5.3 $_POST

功能: 存储通过 POST 请求提交的数据。

示例:

假设你有一个 HTML 表单:

<form method="post" action="process.php">
    <input type="text" name="username" value="张三">
    <input type="submit" value="提交">
</form>

process.php 中,你可以这样处理:

// process.php
echo $_POST['username']; // 输出 "张三"

解释: $_POST 数组获取表单字段 username 的值。

5.4 $_REQUEST

功能: 存储 $_GET$_POST$_COOKIE 中的所有数据。

但是$_REQUEST在接收参数的时候,会受到一个PHP选项的控制。

示例:

// URL: example.com/index.php?name=张三
// Form: <form method="post" action="index.php"><input type="text" name="age" value="28"><input type="submit"></form>

echo $_REQUEST['name']; // 输出 "张三" (从 URL 获取)
echo $_REQUEST['age'];  // 输出 "28" (从表单获取)

解释: $_REQUEST 综合了 $_GET$_POST$_COOKIE 的数据。

5.5 $_SERVER

功能: 提供服务器和执行环境的信息。

示例:

echo $_SERVER['HTTP_USER_AGENT']; // 输出用户的浏览器信息
echo $_SERVER['REQUEST_METHOD'];  // 输出请求方法 (例如 "GET" 或 "POST")

解释: $_SERVER 包含有关服务器和客户端环境的信息。

5.6 $_SESSION

功能: 存储会话级别的数据,通常用于用户认证和其他会话相关信息。

示例:

// 开始会话
session_start();
$_SESSION['username'] = '张三';

// 访问会话数据
echo $_SESSION['username']; // 输出 "张三"

解释: $_SESSION 用于存储和获取会话中的数据。

5.7 $_COOKIE

功能: 存储客户端发送的 cookies 数据。

示例:

// 设置 cookie
setcookie('user', '张三', time() + 3600);

// 访问 cookie
echo $_COOKIE['user']; // 输出 "张三"

解释: $_COOKIE 获取客户端发送的 cookie 数据。

补充:

​ Cookie过程:为了保持HTTP会话的状态性

  • 用户提交账密
  • 服务器进行身份认证
  • 下发身份证,下发Cookie
  • 浏览器客户端所有的请求都会携带身份信息,携带Cookie信息。

5.8 $_FILES

功能: 存储上传的文件信息。

示例:

假设你有一个文件上传表单:

<form method="post" enctype="multipart/form-data" action="upload.php">
    <input type="file" name="fileToUpload">
    <input type="submit" value="上传">
</form>

upload.php 中,你可以这样处理上传的文件:

// upload.php
if ($_FILES['fileToUpload']['error'] === UPLOAD_ERR_OK) {
    echo "文件名: " . $_FILES['fileToUpload']['name'];
    echo "文件类型: " . $_FILES['fileToUpload']['type'];
    echo "文件大小: " . $_FILES['fileToUpload']['size'] . " bytes";
}

解释: $_FILES 数组包含上传文件的各种信息,例如文件名、类型和大小。

相关参数:

变量含义
$_FILES[‘uploaded’]用来保存文件上传的信息
$_FILES[‘uploaded’] [‘name’]上传文件的名字
$_FILES[‘uploaded’] [‘type’]上传文件的类型
$_FILES[‘uploaded’] [‘type_name’]上传文件存储在服务器中的缓存路径
$_FILES[‘uploaded’] [‘error’]错误代码
$_FILES[‘uploaded’] [‘size’]上传文件的大小

$_FILES中存储的与上传文件有关的信息,不是文件本身,文件内容在缓存路径中

正常完成文件上传功能,需要将文件从缓存拷贝到服务器文件系统中。

5.9 $_ENV

功能: 存储环境变量。

示例:

echo $_ENV['PATH']; // 输出环境变量 PATH 的值

解释: $_ENV 提供访问服务器环境变量的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Da1NtY0926

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值