PHP数组

PHP数组

数组是⼀种抽象的数据类型,类似于 Python 语⾔中的列表和字典的组合。
 
数组的基本概念
 
  • PHP 中的数组实际上是⼀个有序映射。映射是⼀种把 values 关联到 keys 的类型。此类型在很多⽅⾯做了优化,因此可以把它当真正的数组,或列表(向量),散列表(是映射的⼀种实 现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另⼀个数组,树形结构和多维数组也是允许的。
<?php
//对于PHP来说这三个变量是没有任何关系的
$stu1 = "wxkun";
$stu2 = 20;
$stu3 = 60.1;

$w = $stu1;
$w = $stu2;
$w = $stu3;   
var_dump($w);  //float 60.1
?>

需要数组 来实现

  • 数组的基本概念
    • 复合数据类型
    • 键值对( key-value
    • key 存储进来变量的 " 编号 "
    • value 存储进来的变量的值
    • 索引数组 变量的 " 编号 " 是整数,数组不具备⼀定的语义。
    • 关联数组 变量的 " 编号 " ⽤字符串表示,可以具备⼀定的语义。这种⽅式也是 PHP 中最常⽤的 ⽅式。
  • 注意
    • 关联数组极⼤提供了PHP 开发的便利性。
    • echo 语句不能够输出数组,可以使⽤ print_r() 函数输出数组。

数组创建

  • 变量名称 [ 索引值 ]= 数据 ;
  • 变量名称 []= 数据 ;// 不写索引值默认是数值数组,从 0 开始
<?php
$name = "wxkun";
$age = 20;
$sex = true;
$score = 60.1;

$stu1[] = $name;
$stu1[] = $age;
$stu1[] = $sex;
$stu1[] = $score;
var_dump($stu1);   //array(4) { [0]=> string(5) "wxkun" [1]=> int(20) [2]=> bool(true) [3]=> float(60.1) }
echo "<hr />";
$stu2['name'] = "Hmm";
$stu2['age'] = 24;
$stu2['sex'] = false;
$stu2['score'] = 85;
var_dump($stu2);   //array(4) { ["name"]=> string(3) "Hmm" ["age"]=> int(24) ["sex"]=> bool(false) ["score"]=> int(85) } 
?>

方法二:array语言结构

<pre>
<?php
$stu1 = array("wxkun",true,24,60.1);
var_dump($stu1);
echo "<hr / >";
$stu2 = array(
 1 => "Mdm",
 2 => false,
 3 => 20,
 4 => 89.9
 );
var_dump($stu2);
echo "<hr />";
$stu3 = array(
 'name' => "Xialuo",
 'sex' => true,
 'age' => 25,
 'score' => 59.9
);
var_dump($stu3);
?>
/*array(4) {
  [0]=>
  string(5) "wxkun"
  [1]=>
  bool(true)
  [2]=>
  int(24)
  [3]=>
  float(60.1)
}
array(4) {
  [1]=>
  string(3) "Mdm"
  [2]=>
  bool(false)
  [3]=>
  int(20)
  [4]=>
  float(89.9)
}
array(4) {
  ["name"]=>
  string(6) "Xialuo"
  ["sex"]=>
  bool(true)
  ["age"]=>
  int(25)
  ["score"]=>
  float(59.9)
}*/

数组元素的访问

  • 通过运算符 [key] ,访问(读取、修改、增加)数组元素。 PHP 数组删除元素,意义不是特别⼤。
  • 通过运算符 [key] 访问到了数组元素,就可以直接进⾏读写。
<meta charset = "utf-8">
<?php
$stu1 = array("wxkun",true,24,60.1);
$stu1['pj'] = "good!"; //增加
var_dump($stu1);
echo "<br />";
unset($stu1['pj']); //删除
echo "学⽣{$stu1[0]}的成绩是{$stu1[3]}<br />";
$nl = 10;
if($nl){
 $stu1[3]+=$nl;//对数组元素进⾏重新赋值,
}else{
 --$stu1[3];
}
echo "学⽣{$stu1[0]}的成绩是{$stu1[3]}<br />";
print_r($stu1);
?>

多维数组

  • 数组中的元素是数组。
  • 数组中的元素可以是任何类型 的数据。
 <pre >
<?php
$stu1 = array("wxkun",true,24,60.1);
$stu2 = array(
 1 => "Mdm",
 2 => false,
 3 => 20,
 4 => 89.9
 );
$stu3 = array(
 'name' => "Xialuo",
 'sex' => true,
 'age' => 25,
 'score' => 59.9
);
$students = array(
 'stu' => array("Hmm",false,22,63.3),
 'stu1' => $stu1,
 'stu2' => $stu2,
 'stu3' => $stu3
);
//var_dump($students);
//print_r($students);
echo "The score of Xl is {$students['stu3']['score']}"
?>

数组的遍历

遍历数组:数组中的每个元素都访问一次。

for循环

利用for循环是可以遍历数组的,但是无法关联数组通常情况下遍历数组的时候,也不会采取这种方法。

foreach语句

foreach 语法结构 提供了简单的遍历数组的方式

  • 基本结构
<?php
foreach($arr as $key => $value){  //$arr 是数组
								  //$key 是数组中的key
								  //$value 是数组中的value
								  //其中$key 和$value 的变量名可以变化
								  //但是位置不能变化
	//代码块
}
foreach($arr as $value){
	//代码块
}

?>

预定义超全局数组变量

  • 预定义:PHP 已经定义好了(存在)的数组变量(存放的数据的类型是数组)。 超全局:超级全局变量,作⽤域(有效区域)是全局,可以函数内部、外部都可以进⾏访问。

数组速查

$GLOBALS

<pre>
<?php
$name = "wxkun";
//var_dump($GLOBALS);
//echo $GLOBALS['name'];
function test(){
 echo $GLOBALS['name']; 
}
test(); //AJEST
?>

$_SRVER

<pre>
<?php
print_r($_SERVER);
?>

$_GET

  • $_GET 是⼀个数组 .
  • 作⽤域是超全局,不需在脚本内部定义或初始化,即可使⽤。
  • 接收从浏览器客户端 GET ⽅式( URL 中)传递到服务器的参数。
  • GET 传参的参数名 name $_GET 数组的 key ,参数值 AJEST 作为数组的 value
  • GET 传参时,直接将参数拼接到 URL 中即可。

$_POST

  • ⽤于接收浏览器客户端 POST ⽅式传递过来的参数。
  • POST 传参,参数在请求正⽂中。
  • GET 传参 " 可⻅ " POST 传参 " 不可⻅ " 。以 HTTP 协议通信,都是明⽂的。
  • 如何发送 POST 请求呢?
    • 利⽤表单
    • 利⽤ hackbar
    • 利⽤ Burp Suite Repeater 模块
<?php
//form.php
?>
<meta charset = "utf-8"> <h1>⽤户登录</h1> <form
 action = "./post.php"
method = "post"
 target = "_blank"
>
⽤户名:<input type = "text" name = "uName" />
密码:<input type = "text" name = "uPass" />
<input type = "submit" name = "submit" value = "登录">
</form>
<pre>
<?php
//post.php
var_dump($_POST);
?>

$_FILES

⽤来接收上传的⽂件相关信息,⽽不是⽂件的内容,⽂件是字节流。
 
<!-- upfile.php -->
<meta charset = utf-8> <h1>⽂件上传测试</h1> <form
 method = "post"
 action = "./files.php"
 enctype = "multipart/form-data"
 target = "_blank"
><input type = "file" name = "upFile"> <input type = "submit" name = "submit" value="上传⽂件">
</form>
<?php
//files.php
sleep(10);
var_dump($_FILES);
?>
  • $_FILES['upFile'] ,⽤来保存⽂件上传信息的。 upFile 实际上是表单中⽂件域的 name 属性
  • $_FILES['upFile']['name'] ,上传⽂件的名字。
  • $_FILES['upFile']['type'] ,上传⽂件的类型。
  • $_FILES['upFile']['tmp_name'] ,上传⽂件存储在服务器中的缓存路径。
  • $_FILES['upFile']['error'] ,错误代码。
  • $_FILES['upFile']['size'] ,上传⽂件的⼤⼩

$_COOKIE

Cookie 是存储在浏览器中,⽤来标识身份认证信息的,它会随着浏览器的请求⽽发送到服务器。服务器要通过 Cookie 识别⽤户身份,就需要接收 Cookie 信息,并进⾏⼀系列身份判断。 PHP 中⽤来接收 Cookie 信息(参数,键值对)的预定义超全局数组是 $_COOKIE
<?php
//cookie.php
var_dump($_COOKIE);
?>
  • document.cookie
//console
document.cookie = "name=admin";
  • Burp Suite

$_REQUEST

$_REQUEST ,默认包含了 $_GET $_POST $_COOKIE 数组中的所有变量。 以上提到的三个数组,包含了浏览器客户端的三⼤传参⽅式,也称 "GPC" 。$_REQUEST 数组在接收参数的时候,会受到⼀个 PHP 选项的控制。
 
request_order = "GPC"

$_ENV

<pre >
<?php
//env.php
//php 5.2.17
var_dump($_ENV);
?>

处理数组的相关函数

count()

统计数组中单元个数,或者对象中属性个数。

$blackList = array('exe','php','aspx','jsp');
echo count($blackList);//4

array_count_values()

统计所有元素出现的次数,返回一个数组。

$arr = array(1,"hello",1,'world','world',1);
print_r(array_count_values($arr));
/*
Array
(
 [1] => 3
 [hello] => 1
 [world] => 2
)
*/

in_array()

检查数组中是否存在某一个值,区分大小写

$blackList = array('exe','php','aspx','jsp');
var_dump(in_array('exe',$blackList));//bool(true)

array_search()

再数组中搜索给定的值,如果成功返回⾸个相应的 key
 
$blackList = array('exe','php','aspx','jsp');
echo array_search('php',$blackList); //1

array_key_exists()

$blackList = array('exe','php','aspx','jsp');
var_dump(array_key_exists(100,$blackList)); //bool(false)

 

 

可以去找的东西往往是找不到的,
天下万物的来和去都有他的时间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值