Blogger Information
Blog 15
fans 0
comment 0
visits 11989
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php数组的创建以及遍历方法--2019年9月17日
缘的博客
Original
878 people have browsed it

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.    当使用二维或多为数组时,一般使用外层索引数组,内层关联数组的形式,方便前端接收处理


Correction status:qualified

Teacher's comments:完成的不错。
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments