php中的数组


0x01.数组的定义与类型

如何定义数组?
一般都是使用 array() 函数定义的数组

<?php
$arr = array('jsp','asp','php');
print_r($arr);
?>

输出结果
数组的两种类型
数组类型分
1.索引数组
2.关联数组

索引数组,其实就是全名叫 数字索引数组,顾名思义
就是以数字索引的数组,也就是上面那串代码定义的,就索引数组
(在PHP中,数组的值第一位是 0)

关联数组,也很简单,数组其实就是由键值组成的,与python中的字典相似,关联数组其实就是我们自定义的键

<?php
$arr = array('name'=>'young','old'=>'17','from'=>'中国');
print_r($arr);
?>

输出结果
这样看的话可能不是很清楚,我们可以直接查看源代码,看起来不会懵逼

这样其实就是关联数组,而直接使用array定义的就是的 索引数组,第一位是0,觉得很麻烦。也可以这样定义,把第一位定义成 1

0x02. 一维数组、二维数组 与 多维数组

<?php
$arr1 = array('young','17','中国');    //一维数组
print_r($arr1);                        //输出数组
echo "<br>";
//定义二维数组
$arr2 = array(
'name'=>array('张三','李四','王五'),
'old'=>array('20','21','23'),
);
print_r($arr2);//输出数组
?>

上面定义的其实就是一维数组,其实听着很高大尚,其实就是跟嵌套差不多
在一个数组中嵌套这另外一个数组
输出结果对比
这样就更容易的对比了,我们也可以查看源代码,这样看起来舒服
查看源代码

然后我们继续在数组中嵌套一层就是 三维数组,几层嵌套,就是几层数组,但是建议不要太多

0x03.数组遍历

1)for循环遍历数组

<?php
$arr = array(1,'张三',"a公司","北京市","(010)987654321","gao@qq.com");
for($i=0;$i < count($arr);$i++){
    echo $arr[$i]."   ";
}
?>

源代码
我们依旧右键点击查看源代码
其实for循环主要是通过 $arr[$i]
首先定义一个一维数组,然后使用for循环,初始值为0,count()就是判断数组的长度,有几个值,这里的话是从1开始算的,每遍历一次就 加1.

它先是 执行 $i=0,
然后代入 $arr[0] 就输出了1,然后 i 加 1。判断是否小于数组的值,然后再次循环…
直到 i 为6时,才停止循环。因为 6 不可能小于 6。
对于多维数组的遍历,只需要多加一个for循环即可

2)foreach() 遍历数组

foreach()遍历有2种形式
第一种:

$arr = array('baidu','taobao','google');
foreach($arr as $value){
    循环体
}

第二种:

$arr = array('baidu','taobao','google');
foreach($arr as $key => $value){
    循环体
}

①.第一种解释
其实第一种遍历的是数组里面的值

<?php
$arr = array("baidu","taobao","google");
foreach($arr as $value){
    print_r($arr);
    echo '$value为:'.$value."<br>";
}
?>

我其实不用 print_r 的,但是为了清楚
首先foreach($arr as $value)
$arr 其实就是一维数组里面的内容,而变量$value 其实就是数组中的值,也就是说,$arr as $value 其实就是遍历数组中的内容,把 $arr 中的内容,赋值给 value

至于 $value 可以自定义命名的

②第二种解释:

<?php
$arr = array('baidu','taobao','google');
foreach($arr as $key => $value){
    echo $key.'=>'.$value."<br>";
}
?>

其实就是把键也给遍历了,并且赋值给了 key

0x04.字符串与数组转换

1. 将字符串变为数组 explode()

<?php
$arr = 'baidu,taobao,google';
$array = explode(',',$arr);
print_r($array);
?>

其实这里就是分割,这边是逗号,然后我们就以逗号分割,分割的时候
它会返回数组(这里也就是分割)

2. 将数组变为字符串 implode()

<?php
$arr = array('baidu','taobao','google');
$str = implode(',',$arr);
echo $str;
?>

implode(‘符号’,str)
看上面这个就知道了,符号就是说,要用什么分割

0x05.数组的一些操作

1)统计数组个数 count()
<?php
$arr = array('baidu','taobao','google');
$str = count($arr);
echo $str;
?>

然后这里的话就是,使用count函数,如果要统计多维数组呢?

<?php
$arr = array(
'baidu'=>array('www.baidu.com'),
'taobao'=>array('www.taobao.com'),
'google'=>array('www.google.com')
);
$str = count($arr,1);
echo $str;
?>

这里只需要在count() 函数添加一个 1 参数就可以了

2)数组中的 “增” array_push()

使用 array_push(add,add_var)

<?php
$arr = array('baidu','taobao','google');
array_push($arr,'boke','baidu');
print_r($arr);
?>

成功的把boke和baidu添加进去了

3) 数组中的 “删” array_unique()

这时候我们看上面似乎多添加了一个百度

<?php
$arr = array('baidu','taobao','google');
array_push($arr,'boke','baidu');
print_r($arr); 
//上面是添加,下面删除重复值
$del = array_unique($arr);
print_r($del);
?>

array_search(var,array,strict): 查找 值 返回键
var :是我们需要查找的值
array:是指定被我们查询的数组
strict:是可选参数,当参数为 true时,还会给数组中检查给定值得类型

这个函数是查找指定的值,然后返回键,如果没有查找到的话返回 null,不是flase

<?php
$arr = array('baidu','taobao','google');
$result = array_search('taobao',$arr);
print_r($result);
?>

查找到值返回键名
没有查找到值

②通过键查找 值

<?php
$arr = array('baidu','taobao','google');
echo $arr[0]
?>

这样就可以查找到了

5) 数组中的 “改”
<?php
$arr = array('baidu','taobao','google');
$arr[0] = "boke";
print_r($arr);
?>

这里的修改,其实就是在查询的基础上 重新赋值一下就可以了

数组的的一些其他操作

获取数组的最后一个元素 array_pop()
array_pop 函数返回数组的最后一个值,并且数组长度减 1,如果数组为空,或者不是数组,则返回 null

array_pop(array)
这里的array 其实就是 定义的那个要获取的数组

<?php
$arr = array('baidu','taobao','google');
$array = array_pop($arr);
print_r($arr);
echo "<br> 被弹出的函数:$array";
?>

除了上面这些常用的操作,还有 联合使用 list(),each(),while() 遍历数组


文章作者: Young
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Young !
评论
 上一篇
权限维持方法 权限维持方法
0X01 获得初始权限Linux有很多种反弹shell的方法,反弹shell的好处主要是操作过程中会更加方便,对我个人来说,主要是命令补全,总之,从权限维持的角度来说,可以更好的去执行一些操作. 能否反弹shell,要根据目标的环境来尝试,
2020-07-30
下一篇 
SQL注入审计 SQL注入审计
0x00 简介本文章来自 公众号:404安全 为什么第一章我们学习,因为看这篇文章的朋友大概也看过我前面写的MySQL_wiki系列,这里来SQL注入的话我们能方便理解,同时sql注入也是审计中我们经常想要找到的,比较以来就getshell
2020-04-01
  目录