Chapter10 数组
数组简介
在C语言中,我们对数组的定义是“将一些相同变量类型的值放在一个集合里”。而在PHP中,你可以将任何类型的变量或数值放在一个数组中。PHP中,数组可以理解为是一组任何形式的值的集合。
定义一个数组
与数组相关的关键字是,你可以用这样的方式来创建一个数组:
$arr=array();
在php5.4之后,数组的关键字新增了形式,也就是说,在php5.4之后,你可以用这样的方式来创建一个数组:
$arr=[];
这种书写方式相比于之前便捷得多。
在之后的讲解中,都将使用的形式。形式的数组比较常见,而且不会有版本兼容问题。
PHP中的数组实际上是将任何形式的数据组织成了的形式,而且这种形式可以嵌套。例如下列代码分别展示了一位数组、二维数组以及多维数组的创建。
$arr1=array(1=>'a',23=>'bc',45=>'de',678=>'fgh');
$arr2=array(
1=>'a',
2=>array(
22=>'bb',
23=>'bc'
));
$arr3=array(
'code'=>,
'msg'=>'成功',
'data'=>array(
=>array(
'name'=>'wyfan',
'engname'=>'kris'
),
1=>array(
'name'=>'hztao',
'engname'=>'ztao'
)
));
使用数组
使用数组很简单,使用数组名+键名就可以访问了。普遍的形式是这样:
//arr.php
echo$arr3['data'][]['name'];
基于上面的的值,上面一行代码会输出
如果想要输出数组的值,可以直接使用函数。例如直接输出上面的的值:
//arr.php
var_dump($arr3);
这样执行的结果是:
数组 & 字符串
在实际开发中经常会遇到类似这样的需求:
你可以从一些来源(文件或网页等)获取到类似这样的数据:
小明,小红,小刚,小智,小霞,小茂,皮卡丘,大木博士
将这样的数据整理成数组,再进行接下来的操作。
针对类似这样的问题,PHP提供了好用的函数来解决问题。函数的定义是
explode(separator,string,limit);
例如上述问题可以用这种方式来解决:
$str='小明,小红,小刚,小智,小霞,小茂,皮卡丘,大木博士';
$arr=explode(',',$str);
var_dump($arr);
程序的运行结果是:
如果接下来需要存入数据库,那么数组就更容易接受了。
相对于,PHP还提供了对应的反函数,这个函数可以将数组变成字符串。函数的定义是
implode(separator,array);
我们将上面的问题改一下。
已有条件都不变,我们最终需要将列表变成竖线分割的形式。
当然这个问题可以使用字符串替换来解决,但是我们现在需要体现的作用,所以我们需要连续使用和两个函数。上面的问题可以这样解决:
$str='小明,小红,小刚,小智,小霞,小茂,皮卡丘,大木博士';
$arr=explode(',',$str);
$newStr=implode('|',$arr);
var_dump($newStr);
程序运行结果是
数组操作函数
堆栈 & 队列
堆栈和队列可以理解为是进出规则不同的两种容器。堆栈是后进先出(LIFO),用图表示则是这样的:
队列则是先进先出(FIFO):
在PHP中,这两种结构都可以用数组来表示。对数组元素进行添加和删除,涉及到了如下函数。
将一个值追加在数组末端,返回新数组元素的个数。
此函数还有一种简略的形式
$arr[]=$value;
这种方式也会将值添加在数组末端,也就是说相当于多次调用上述形式。如果只需要将一个值加入数组,不如用上述形式便捷,同时也没有调用了函数的负担。
即使数组是键值对形式,新加入的元素的键依然是数字。
我们可以用这样一个程序来测试。
//arraypush.php
$arr=array(
'first'=>'apple',
'second'=>'banana'
);
$newValue='orange';
var_dump($arr);
$res=array_push($arr,$newValue);
var_dump($arr,$res);
$arr[]='cherry';
var_dump($arr);
运行程序,我们可以看到程序的运行结果。
返回了新数组的元素个数,新加入的元素的键是数字。并且两种添加元素的方法产生了相同的作用。
在实际应用中,数组最外层大多是数字键,这种数组往往表示一个列表。所以在的应用场景下,你不必担心新元素的键是数字的问题。
删除数组arr的最后一个元素,如果操作成功则返回最后一个元素值,如果arr非数组或数组是空的,则返回NULL。如果arr不是数组,系统还会给出警告。
对此只需要一段简短的代码就可以测试这个函数的作用了。
//array_pop.php
$arr=array(
'first'=>'apple',
'second'=>'banana'
);
$lastValue=array_pop($arr);
$fakeArr='fake';
$emptyArr=array();
$test1=array_pop($fakeArr);
$test2=array_pop($emptyArr);
var_dump($lastValue,$arr,$test1,$test2);
程序运行结果是
删除并返回arr的第一个元素。如果数组本身是以数字为键,则新数组会获得新的键,从0开始并递增。
为此我们要编写一段程序来测试结果。
//array_shift.php
$arr=array('apple','banana','cherry');
var_dump($arr);
$firstValue=array_shift($arr);
var_dump($firstValue,$arr);
程序的运行结果是
向数组arr头部插入元素,返回新数组的元素个数。数组键将从0开始递增,新元素的顺序与参数顺序保持一致。
接下来的例程将要测试此函数的功能。
//arrayunshift.php
$arr=array('apple','banana','cherry');
var_dump($arr);
$res=array_unshift($arr,'pig','monkey');
var_dump($arr,$res);
程序的运行结果是
键 & 值
使用函数可以得到数组值组成的新的数组,使用函数可以得到数组键组成的新的数组。
//keysAndValues.php
$arr=array(
'code'=>,
'msg'=>'success',
'data'=>array(
array(
'classname'=>'chinese',
'classtime'=>'8:00',
'classroom'=>'501'
),
'what are you nongshalei?'
)
);
$keys=array_keys($arr);
$values=array_values($arr);
var_dump($keys,$values);
上述代码运行结果是
遍历
PHP中使用结构可以遍历数组的所有元素,并对数组元素进行相应处理。结构的一般形式是
foreach($arras$key=>$value){
//do something
}
在循环体中,表示当前循环的键,表示当前循环的值。和都是临时变量,每次循环都会使其变化,并在循环体执行完毕后不复存在。
当不需要关注数组键的时候,还有简略形式:
foreach($arras$value){
//do something
}
下面我们使用结构,将一个“待办事项”数组向用户输出为一个代办清单。
//foreach.php
$arr=array('week up','wash face','go out','work','back home','sleep');
echo"you will do following things tomorrow:\n";
foreach($arras$k=>$v){
echo$k.':'.$v."\n";
}
echo"finish!\n";
数组排序
其他的数组相关常用函数
量取长度
去重
合并
拆分
随机取值
随机洗牌
数组的相关操作函数还有很多,在此不一一列举。你可以根据实际开发需要查询相关函数。
领取专属 10元无门槛券
私享最新 技术干货