博客列表 >php数组的创建以及遍历方法--2019年9月17日

php数组的创建以及遍历方法--2019年9月17日

缘的博客
缘的博客原创
2019年09月19日 11:03:08868浏览

0x01    数组的创建

    php数组按类型分有:索引数组和关联数组;按维度分有:一维数组,二维数组,三维数组,...,n维数组(一般到三维数组就停止了,因为更高维的数组对计算机的计算性能要求较高,会导致运行速度下降,简单来说就是处理不过来)

    下面是各类数组的创建方式:

// 数组的创建(索引数组)
// 1. 使用内置函数
$arr = array('小明','小红','小花');

// 2. 使用[]简写
// 如果两个数组的名字一样,后定义的数组会覆盖先定义的数组
// 某些老版本不支持这种创建方法
$arr = ['小蓝','小绿','小兰'];

// 关联数组,使用=>标识变量名和值的关联关系。注意=>与变量名和值之间不能有空格,否则会报错
$arr2 = ['name'=>'小明','age'=>18,'gender'=>'male'];

// 关联数组和索引数组可以混编
$arr3 = ['php'=>'世界上最好的编程语言','千里行走','10'=>'外婆桥','童话镇'];
//print_r($arr3);

// 二维数组
$arr4 = [
['name'=>'小明','id'=>1],
['name'=>'肖华','id'=>20],
'学员'
];
//print_r($arr4);

$arr5 = [
'name'=>'小明',
'name'=>'肖华',
['name'=>'怪盗基德',
'desc'=>'magician'
]
];

//三维数组
$arr6 = [
['name'=>'小明',
'id'=>1,
['job'=>'student','age'=>12]
],
['name'=>'肖华',
'id'=>20,
['job'=>'student','age'=>16]
],
[
'desc'=>['job'=>'magician','age'=>18],
'name'=>'怪盗基德',
'id'=>20
]
];
//print_r($arr6);


0x02    打印数据

    在php中有三种打印数据的方法:echo、print_r、var_dump

    以下是这三种方式的使用方法及特点(注:下面出现的数组均在0x01中定义)

// echo只能打印普通类型的数据,直接打印整个数组时会报错
// echo $arr;会报错
echo $arr[1]."<br>";
echo $arr2['gender']."<br>";

// 打印数据,包括数组。但打印数组时会带有array(),所以不能用于前端展示
print_r($arr);
// 打印数据以及数据的数据类型;对于数组和字符串而言,会显示长度。其余显示值大小
var_dump($arr2);


0x03    遍历数组

    在php中有两种遍历数组的方式:

        1.    使用for循环: 这种方法只适用于遍历索引数组。需要配合count()使用,count()是计算数组长度的内置函数;在php中更常用foreach来遍历数组(注:下面出现的数组均在0x01中定义)

//遍历数组
//遍历一维数组
//1. 使用for循环
// 这种方法只适用于遍历索引数组;在php中更常用foreach来遍历数组
//count()计算数组长度的内置函数
for($i = 0; $i < count($arr); $i++){
echo $arr[$i].'&nbsp';
}
echo '<hr>';

        2.    使用foreach遍历,下面是对foreach参数的解释:

            $arr是需要遍历的数组的名称

            as是关键字

            $k是键,也就是下标;$v是值

            $arr as $k => $v表示每次循环取出当前键值对赋给$k和$v,他们相当于临时变量,每次循环都会改变值

            $arr、as、$v是必需的,$k可以省略

(注:下面出现的数组均在0x01中定义)

//2. 使用foreach遍历
// 一维数组遍历
//索引数组
foreach($arr as $k => $v){
//$arr是需要遍历的数组的名称
//as是关键字
//$k是键,也就是下标;$v是值
//$arr as $k => $v表示每次循环取出当前键值对赋给$k和$v,他们相当于临时变量,每次循环都会改变值
//$arr、as、$v是必需的,$k可以省略
echo $k .'-'. $v.'&nbsp';
}
echo '<hr>';
//关联数组
foreach($arr2 as $k=>$v){
echo $k.'-'.$v.'&nbsp';
}
echo '<hr>';
//混编数组,注意:当混编数组中的某个元素为数组时,不能使用echo打印
foreach($arr3 as $k=>$v){
echo $k.'-'.$v.'&nbsp';
}


    对于二维及以上的数组:

    分两种情况:1. 所有数组元素的格式一致:如果所有元素都是数组,则使用两重foreach循环即可

                        2. 数组元素是数组和普通数据类型混杂,则要先判断数组元素是不是数组

    下面讨论第二种情况(注:下面出现的数组均在0x01中定义):

//二维数组
//分两种情况:1. 所有数组元素的格式一致:如果所有元素都是数组,则使用两重foreach循环即可
//           2. 数组元素是数组和普通数据类型混杂,则要先判断数组元素是不是数组
//下面讨论第二种情况
//遍历二维数组
foreach($arr4 as $k=>$v){
//使用if-else判断来对数组元素的类型进行判断
//is_array()是php的内置函数,用于判断参数是不是数组
//当if的条件为真时,执行if后面的语句;当if的条件为假时,执行else后面的语句
if(is_array($v)){
foreach($v as $kk=>$vv){
echo $kk.'-'.$vv.'&nbsp';
}
echo '<br>';
}else{
echo $k.'-'.$v.'&nbsp';
}
}
echo '<hr>';
//下面是取某个特定数据的方法
//假如我要打印拥有desc属性的数组的值
//1. 知道只有拥有desc属性的元素是数组
foreach($arr5 as $k=>$v){
if(is_array($v)){
foreach($v as $kk=>$vv){
echo $vv.'<br>';
}
}
}
echo '<hr>';
//2. 只知道数组的维度
foreach($arr5 as $k=>$v){
//isset()也是内置函数,可以判断参数是否被声明
if(isset($v['desc'])){
foreach($v as $kk=>$vv){
echo $vv.'<br>';
}
}
}
echo '<hr>';
// 三维数组循环
// 其实无论多少维循环,代码都是类似的,关键在于if语句对数组元素类型的判断以及foreach对当前维度数据的遍历。还有就是每层循环的临时参数不能同名,否则会导致值覆盖
foreach($arr6 as $k=>$v){
if(is_array($v)){
foreach($v as $kk=>$vv){
if(is_array($vv)){
foreach($vv as $kkk=>$vvv){
echo $vvv.'&nbsp';
}
}else{
echo $vv.'&nbsp';
}
}
}else{
echo $v.'&nbsp';
}
echo '<br>';
}


0x04    总结

    1.    数组创建有两种方式:使用内置函数或者使用[]简写;

    2.    数组分为索引数组和关联数组:索引数组以数字为下标,从0开始,可以不指定键的值;关联数组,使用=>标识变量名和值的关联关系。注意=>与变量名和值之间不能有空格,否则会报错,他所使用的下标可以是英文也可以是数字。

    3.    当使用二维或多为数组时,一般使用外层索引数组,内层关联数组的形式,方便前端接收处理


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议