2.6.数组 xtPHPBook

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";

数组排序

其他的数组相关常用函数

量取长度

去重

合并

拆分

随机取值

随机洗牌

数组的相关操作函数还有很多,在此不一一列举。你可以根据实际开发需要查询相关函数。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190221G19TSM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券