【CyberSecurityLearning 47】PHP 数组

目录

数组

数组中的元素:

数组里面也可以包含数组(多维数组/二维数组)

数组的分类

数组的创建

第一种创建数组的方式

第二种创建数组的方式

数组元素的访问

数组的遍历

索引数组遍历(for循环)

关联数组遍历(foreach)

预定义超全局数组变量(重要!)

$_GET(用来接收get方式传递过来的参数)★

实践:写一个简单的登录页面

get.php代码:

login.php代码:

isset函数

$_POST(★)

login.php代码

post.php代码

$_POST上传文件(★)


数组

是变量的一种类型(但是不是基本变量类型)
是一种复合的 数据类型
键值对(键名key     键值value)


数组中的元素:

(除了对象,可以存放任意数据类型的数据!)数组里面也可以存放数组

<?php
$name="AJEST";
$age=24;
$sex=true;
$grade=78.9;
//把上面四个变量放到同一个变量里面去
$stu[]="AJEST";//[]实际上是一个运算符
$stu[]=24;
$stu[]=true;
$stu[]=78.9;
//echo $stu; echo只能输出简单的数据类型
echo "<pre>";//pre标签格式化输出
//print_r($stu);//print_r是输出一个数组
var_dump($stu);
?>

数组里面也可以包含数组(多维数组/二维数组)

<?php
$students=array(
	1901 => array("AJEST",24,true,79.9),
	1902 => array("MDM",23,false,61),
	1903 => array("XL",25,true,59.9)
);
print_r($students);
//想取得第一个学生的成绩
echo $students[1901][3];
?>

 

<html>
	<title>学生基本信息表</title>
	<meta charset="utf-8">
</html>
 
<?php
$students=array(
	1901 => array(
	'name' => "GGG",
	'age' => 24,
	'esx' => true,
	'grade' => 79.9
	),
	1902 => array("MDM",23,false,61),
	1903 => array("XL",25,true,59.9)
);
echo "<table border=3>";
echo "<tr>
	<td>姓名</td>
	<td>年龄</td>
	<td>性别</td>
	<td>成绩</td>
</tr>";
 
foreach($students as $v){
	echo "<tr>";
	foreach($v as $vv){
		if($vv === true){
			$vv = "男";
		}
		if($vv === false){
			$vv = "女";
		}
		echo "<td>".$vv."</td>";
	}
	echo "</tr>";
}
echo "</table>";
?>

 

数组的分类

键值对     整型的正数                叫做索引数组

键值对     具有语义的字符串      叫做关联数组

数组的创建

第一种创建数组的方式

$stu[]

1.在未指定键名的情况下,给数组赋值,键名从最大的开始计数,依次增大

2.可以手动给键名

<?php
$stu[10]="AJEST";//[]实际上是一个运算符
$stu[20]=24;
$stu[30]=true;
$stu[]=78.9;
echo "<pre>";//pre标签格式化输出
var_dump($stu);
?>

<?php
$stu['name']="AJEST";//[]实际上是一个运算符
$stu['age']=24;
$stu['sex']=true;
$stu['grade']=78.9;
$stu[]="Content";
echo "<pre>";//pre标签格式化输出
//print_r($stu);//print_r是输出一个数组
var_dump($stu);
?>

第二种创建数组的方式

array()

<pre>
<?php
$stu1=array("AJEST",24,true,78.9);//[]实际上是一个运算符
print_r($stu1);
$stu2=array(
	'name' => "MDM",
	'age' => "23",
	'sex' => false,
	'grade' =>99.9,
	'Something like this!'
);
print_r($stu2);
?>

数组元素的访问

1、读取

2、添加(不要给数组中原来存在的键名,如果给的键名已存在就是修改)

3、修改

<pre>
<?php
$stu1=array("AJEST",24,true,78.9);//[]实际上是一个运算符
print_r($stu1);
$stu2=array(
	'name' => "MDM",
	'age' => "23",
	'sex' => false,
	'grade' =>99.9,
	'Something like this!'
);

echo $stu1[0];//AJEST  查询名字
$stu1[3]=100;//成绩改成100
print_r($stu1);

?>

数组的遍历

for循环只适用于有规律的索引数组

foreach语言结构

索引数组遍历(for循环)

<?php
$stu1=array("AJEST",24,true,78.9);
//count()--计算数组中的单元数目,或对象中属性的个数
for($i=0;$i<count($stu1);$i++)
{
	echo $stu1[$i]."<br/>";  //中括号是运算符
}
?>

关联数组遍历(foreach)

<?php
$stu1=array(
	'name'=>"MDM",
	'age'=>"23",
	'sex'=>false,
	'grade'=>99.9,
	'something like this!'
);
//foreach就是用来遍历数组的,foreach循环每执行一次就访问键值对(foreash有个自己的计数器,编程者不可见)智能
//数组中有多少个键值对,它就会循环几次
foreach($stu1 as $key=>$value){  //as就相当于把数组作拆分,$key这个变量名是自己定的,这是一种语言结构
	echo $key." => ".$value."<br/>";
}
?>

foreach是我们最重要的一种语言结构,重中之重!

预定义超全局数组变量(重要!)

php定义好了的,可以直接使用
函数内部或者外部都能使用

    $GLOBALS

    引用全局作用域中可以使用的全局变量

    $_SERVER   

    一个包含诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组

    $_GET   (用来接收url传过来的参数)

    通过URL参数传递给当前脚本的变量的数组

    $_POST   

    当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本。

    $_FILES

    通过HTTP POST方式上传到当前脚本的项目的数组

    $_COOKIE

    通过HTTP Cookies 的方式传递给当前脚本的变量的数组

    $_SESSION

    当前脚本可用SESSION变量的数组

    $_REQUEST

    默认情况下包含了 $_GET, $_POST 和 $_COOKIE 的数组

    $_ENV

    通过环境方式传递给当前脚本的变量的数组

$_GET(用来接收get方式传递过来的参数)★

<?php
var_dump($_GET);
?>

接受来自的URL的传递参数

http://localhost/PHP/array/get.php?name=GGG(我们这么通过get方式传递参数?我们需要在这个脚本后面加一个问号

http://192.168.1.132/PHP/array/get.php?name=GGG&passwd=123456(传两个参数需要用&来连接)

参数的名会变成键名

参数的值会变成键值

实践:写一个简单的登录页面

get.php代码:

<meta charset="utf-8">
<?php
//是否点击登录按钮
if(isset($_GET['userSubmit'])){
	if(isset($_GET['userName']) && $_GET['userName']=="AJEST"
	&& isset($_GET['userPass']) && $_GET['userPass']=="123456"
	){
		echo "welcome,".$_GET['userName'];
	}else{
		echo "用户名或者密码错误<a href='./login.html'>请重新登录</a>";
	}
}else{
	echo "登录错误,请重新登录<a href='./login.html'>请通过表单重新登录</a>";
}
?>

login.php代码:

<html>
<meta charset="utf-8">
<h1>用户登录</h1>
# action是提交到哪个页面(提交到当前路径下的get.php),提交方式是GET,target="_blank"就是在新标签页打开
<form action="./get.php" method="get" target="_blank">  
用户名:<input type="text" name="userName"><br />
密码:<input type="password" name="userPass"><br />
<input type="submit" name="userSubmit" value="登录">
</form>
</html>

GET数组来接收表单提交的时候,它会把我们标签的name属性值作为get数组的键名,标签的value会作为get数组的键值

isset函数

<?php
var_dump(isset($_GET));//isset是判断变量是否被定义isset,并且非 null
var_dump(isset($_GET['name']));

?>

$_POST(★)

当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data(文件) 时,会将变量以关联数组形式传入当前脚本。

GET数据在URL里面,POST数据正在HTTP请求报文的请求正文中

接收用post方式传过来的参数

<?php
var_dump($_POST);
?>

login.php代码

enctype不写默认就是application/x-www-form-urlencoded
写multipart/form-data是文件

<html>
<meta charset="utf-8">
<h1>用户登录</h1>
<form action="./post.php" method="post" target="_blank" enctype="">  
用户名:<input type="text" name="userName"><br />
密码:<input type="password" name="userPass"><br />
<input type="submit" name="userSubmit" value="登录">
</form>
</html>

post.php代码

<pre>
<meta charset="utf-8">
<?php
//var_dump($_POST);
if(isset($_POST['userSubmit'])){
	if(isset($_POST['userName']) && $_POST['userName']=="GGG"
	&& isset($_POST['userPass']) && $_POST['userPass']=="123456"
	){
		echo "Welcome,".$_POST['userName'];
	}else{
		echo "用户名或密码错误<a href='./login.html'>请通过重新登录</a>";
	}
}else{
	echo "Error!<a href='./login.html'>请通过表单登录</a>";
}
?>

$_POST上传文件(★)

$_FILES    通过HTTP POST方式上传到当前脚本的项目的数组

关于上传文件大小的上限,我们需要去修改php.ini配置文件(此处略过)

对php.ini配置文件做修改

使上传文件后的缓存位置更改为C:\phpStudy\tmp\tmp

C:\phpStudy\tmp\tmp是更改php上传文件路径

重启phpStudy(使配置文件生效)

upfile.php:

<html>
<meta charset="utf-8">
<h1>
	文件上传测试
</h1>
<form
	action=""
	method="post"
	enctype="multipart/form-data"
>
	<input type="file" name="userUpFile">
	<input type="submit" name="userSubmit" value="上传">
</form>
</html>
<hr />
<?php
echo "<pre>";
if(isset($_POST['userSubmit'])){  //用户是否点击提交按钮
	var_dump($_FILES);   //$_FILES捕获文件上传信息
	$tmp_path=$_FILES['userUpFile']['tmp_name'];
	$path=__DIR__."\\".$_FILES['userUpFile']['name'];//__DIR__获取当前php脚本所在目录
	//echo $path;
	if(move_uploaded_file($tmp_path,$path)){ //把缓存文件移动到目标文件(缓存文件如果不移动会瞬间消失,要利用sleep函数才能看到)
	//move_uploaded_file(参数1,参数2);将上传上来的缓存文件的目录(参数1)保存到参数2目录下
		echo "upfile success!";
		echo "<br />".$_FILES['userUpFile']['name'];
	}else{
		echo "upfile failed";
	}
}
?>

猜你喜欢

转载自blog.csdn.net/Waffle666/article/details/115030506