目录
数组
是变量的一种类型(但是不是基本变量类型)
是一种复合的 数据类型
键值对(键名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";
}
}
?>