数组是一个能在单个变量中存储多个值的特殊变量。
数组的英文是array,可以存入多个不同类型的数据,是一个复合数据类型。
在 PHP 中,有三种类型的数组:
数组特点:
输出数组的时候不能使
echo
语句,可以使用print_r()
函数来代替。
在 PHP 中,array()
函数用于创建数组:
语法:
变量 = array(变量1,变量2,...);
变量 = array(
'key1' => value1,
'key2' => value2,
...
)
=>
特殊的字符,在array 语言结构
中连接key
和value
。直接创建
$animal[]='dog';
$animal[]='wolf';
$animal[]='cat';
var_dump($animal);
array创建
$stu=array("hxy",'woman',18,100);
print_r($stu);
直接创建
把学生信息存储在一个变量里,需要用数组来实现。
$stu1['name'] = 'zs';
$stu1['sex'] = 'man';
$stu1['age'] = 18;
$stu1['score'] = 88;
echo ""
;
print_r($stu1);
arry创建
$stu4 = array(
'name' => 'LSP',
'sex' => 'woman',
'age' => 19,
'score' => 90.9
);
print_r($stu4);
print_r
与echo
类似,在输出布尔类型变量True
时,打印的是1
;在输出False
时,打印什么都没有。
数组中的元素可以是任何类型的数据。数组中的元素也可以是数组。
$name = "zs";
$sex = 'man';
$age = 18;
$score = 100;
$people['name']=$name;
$people['sex']=$sex;
$people['age']=$age;
$people['score']=$score;
$people1['name']='zs';
$people1['sex']='man';
$people1['age']=18;
$people1['score']=100;
$stu1['name'] = 'zs';
$stu1['sex'] = 'man';
$stu1['age'] = 18;
$stu1['score'] = 88;
$stu=array("hxy",'woman',18,100);
echo "
";
$ns_class=array($people,$people1,$stu,$stu1);
echo ""
;
print_r($ns_class);
?>
通过key 找到数组中的元素。
echo "hxy's score is {$stu[3]}";
echo "li's age is {$stu1['age']}";
echo "zs's age is {$ns_class[0]['age']}";
对元素的操作包括:
数组元素操作 | 说明 |
---|---|
读取 | 通过key,捕获数组中的value。 |
修改 | 直接赋值即可。 |
增加 | 直接赋值即可。 |
删除 | PHP 中删除数组中的元素意义不大,置之不理即可。 |
尝试修改数组中的元素:
echo "hxy's score is {$ns_class[2][3]}
";
$ns_class[2][3] += 10;
echo "hxy's score is {$ns_class[2][3]}";
$stu1['word'] = "为往圣继绝学,为万世开太平。";
var_dump($stu1);
使用for 循环可以遍历数组,但是此种方法依赖于数组中key 自然数规律。
for ($i = 0; $i < count($stu1); $i++) {
echo $stu1[$i]."
";
}
显然,此种方法具有局限性,只能遍历索引数组。
foreach 语法结构提供了遍历数组的简单方式。
foreach 这种语言结构是专门用来遍历数组的,foreach 是一种循环,不需要额外计时器。
foreach ($variable as $key => $value) {
# code...
}
直接访问数组的值:
foreach ($stu as $v) {
echo $v."
";
}
访问键值对:
foreach ($stu1 as $k => $v) {
echo $k. "=". $v. "
";
}
注意:
函数 | 作用 |
---|---|
count() | count($value, $mode): int |
array_count_values() | array_count_values(array $array): array |
in_array() | 检查数组中是否存在某一个元素。 此函数可以应用于黑白名单策略。 |
array_key_exists() | |
array_search() |
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用
名称 | 作用 |
---|---|
$_GET | 通过URL 参数(又叫query string)传递给当前脚本的变量的数组。 注意:该数组不仅仅对method 为 GET 的请求生效,而是会针对所有带query string 的请求。 |
$_POST | 当HTTP POST 请求的==Content-Type 是application/x-www-form-urlencoded 或multipart/form-data== 时,会将变量以关联数组形式传入当前脚本。 |
$GLOBALS | 关联数组array,包含当前脚本内定义成全局范围的所有变量的引用。数组的键就是变量的名字。 |
$_SERVER | 服务器和执行环境信息。 |
$_FILES | 通过HTTP POST 方式上传到当前脚本的项目的数组。此数组的概况在POST 方法上传 章节中有描述。 |
$_COOKIE | 通过HTTP Cookies 方式传递给当前脚本的变量的数组。 |
$_SESSION | 当前脚本可用 SESSION 变量的数组。更多关于如何使用的信息,参见Session 函数 文档。 |
$_REQUEST | 默认情况下包含了$_GET,$_POST 和$_COOKIE 的数组。 |
$_ENV | 通过环境方式传递给当前脚本的变量的数组。 |
注意:
前端代码:
DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<div class="container" style="margin-top: 20%;">
<div class="row">
<div class="col-md-8 col-md-offset-3">
<form class="form-inline" action="8.php" method="get">
<div class="form-group">
<label for="ip">IP:label>
<input type="text" class="form-control" id="ip" placeholder="127.0.0.1" name="ipaddr">
div>
<div class="form-group">
<label for="Port">Port:label>
<input type="text" class="form-control" id="Port" placeholder="0-65535" name="port">
div>
<button type="submit" class="btn btn-default">快速连接button>
form>
div>
div>
div>
body>
html>
后端代码:
<!-- 使用switch语句编写一个程序,前端get传参,后端根据传参的端口号判断具体的服务类型 -->
<?php
$ipaddr = @$_GET['ipaddr'];
$port = @$_GET['port'];
echo "接收到的IP地址为" . $ipaddr;
echo "
";
echo "
";
switch ($port) {
case 80:
echo "HTTP协议请求,80端口开放";
break;
case 443:
echo "HTTPS协议请求,443端口开放";
break;
case 20:
echo "FTP协议,数据端口开放 20";
break;
case 21:
echo "FTP协议,控制端口开放 21";
case 22:
echo "SSH协议端口开放 22";
break;
case 3306:
echo "MySQL数据库端口开放 3306";
break;
case 27017:
echo "MongoDB数据库端口开放 27017";
break;
case 6379:
echo "Redis数据库端口开放 6379";
break;
case 3389:
echo "Windows远程桌面服务端口开放 3389";
break;
default:
echo "输入的端口号不在范围内。。。。";
}
前端代码示例:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>post requesttitle>
head>
<body>
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2" style="margin-top: 10%;">
<h3 class="text-center">form表单h3>
<form action="1.php" method="post">
username:<input type="text" name="username" class="form-control" >
password:<input type="password" name="password" class="form-control">
<br>
<p>
<input type="submit" name="button" value="提交" class="btn btn-danger">
p>
form>
div>
div>
div>
body>
html>
后端代码:
//1.php
<?php
$username = @$_POST['username'];
$password = @$_POST['password'];
echo $username;
echo $password;
if(!$username){
echo 'Please input a username!!';
}
if(!$password){
echo ' input a password is require!!';
}
?>
为了弥补HTTP 协议的无状态性,保持用户的会话状态,需要使用Cookie 技术。
Cookie 过程:
$_REQUEST,默认包含了$_GET,$_POST,$_COOKIE 数组中的所有变量。以上提到的三个数组,包含了浏览器客户端的三大传参方式,也称GPC。
但是$_REQUEST 数组在接收参数的时候,会受到一个PHP 选项的控制。
相关参数
变量 | 含义 |
---|---|
$_FILES[‘uploaded’] | 用来保存文件上传信息的。 uploaded 就是文件域input 标签name 属性的值。 |
$_FILES[‘uploaded’][‘name’] | 上传文件的名字。 |
$_FILES[‘uploaded’][‘type’] | 上传文件的类型。 |
$_FILES[‘uploaded’][‘tmp_name’] | 上传文件存储在服务器中的缓存路径。 |
$_FILES[‘uploaded’][‘error’] | 错误代码。 |
$_FILES[‘uploaded’][‘size’] | 上传文件的大小 |