enter image description here

第三章 不一样的数组

几乎所有的语言都原生支持数组,PHP也不例外!在本章中我们首先要对数组的一些基础知识进行回顾和熟悉,然后把PHP中有关数组的常用操作整理和归纳以便后面章节中学习使用。与基础学习不同的是我们将引入 SplFixedArray 的相关内容并对比普通数组学习这部分的内容。最后实现我们第一个数据结构--连续的线性表!当然还会附加一个PHP数组常用函数的总结说明。

让我们先对本章内容做一个概览。

本章内容如下:

  • 数组的定义
  • 数组的分类
  • 数组的常用操作
  • 数组的遍历
  • SplFixedArray数组
  • 线性表的实现
  • 数组函数

3.1 PHP数组定义

我们直接拿官方手册上的定义放在这里

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

上面是官方手册对PHP中数组的定义说明。不过我相信大家对于PHP数组有更加深刻的认知,特别是在使用层面上讲,这里我就简单的列出几条供大家参考,更多的内容能够大家可以结合实际应用经验自己补充。

  • PHP数组使用前不用预定义长度。
  • PHP数组的长度会随着数据增删动态改变长度!
  • PHP数组是弱类型的,同一个数组可以存储不同类型的值。
  • PHP数组的下标可以是整型也可以是字符串。
  • php数组按照插入顺序存储元素。
  • PHP数组普通删除元素(unset)后不会重新建立索引。
  • PHP内置函数的增删操作会得到重新索引后的数组。

由于存在以上这些特征使得PHP的数组使用非常灵活,甚至有些“独树一帜”。

3.2 PHP数组分类

PHP中数组实际上可按照不同的标准来分类。

3.2.1 按照数组下标类型来分

  • 索引数组 : 又称为整型数组,数组的下标索引是整数类型,默认从0开始;
  • 关联数组 : 类似字典结构,数组的下标是字符串类型的。

3.2.2 按照数组的维度来分

  • 一维数组 : 数组每个元素都是非数组类型的值。
  • 二维数组 : 数组中至少有一个元素的类型是一维数组,并且每一个元素若是数组类型其维度不超过一维。
  • 多维数组 : 数组中至少有一个元素值是二维或者更多维度的数组类型。

3.2.3 按照实现方式不同来分

  • PHP内置数组类型。
  • SplFixedArray数组类型。

3.3 PHP内置数组的常用操作

3.3.1 初始化

所谓的初始化就是在使用之前要先声明变量的类型及初始状态的值。PHP内置数组类型在使用之前是不要求一定要初始化的,我们可以在需要的时候直接使用。

定义一个数组变量$arr, 并将值[1,2,3,4,5]赋予该变量

$arr = [1,2,3,4,5];

实际上上面代码的使用过程已经包含了初始化的过程。我们也可以把初始化过程给拿出来:

$arr;

$arr = [1,2,3,4,5];

当然了,我们有很多情况是需要初始化,例如我们要使数组函数对一个变量进行处理,但是赋值操作有可能没有正常完成,这样就必须初始化了!而且面向对象编程中,有很多成员属性也需要初始化,数组初始化成空数组就可以了,如下:

$arr = [];

Tips 初始化的两个作用: 1, 指定该变量的类型,尤其是需要使用内置函数处理变量前,一定要初始化! 2, 指定变量的默认值。

3.3.2 增加元素

我们这里就以一维数组为例来进行说明,首先还是让我们来初始化一个数组,这样下面就能使用了!

$arr = [];

在数组的尾部进行添加

方式一: 直接对 $arr[] 赋值, 原因是PHP数组的下标会自动增长:

$arr[] = 1;

方式二: 使用PHP内置函数array_push();

返回值:添加元素后数组的长度
语法:array_push(数组变量, 值)
栗子:
    array_push($arr, 1);

Tips 推荐使用第一种方式,因为第二种方法毕竟是调用了一个函数,会造成额外的负担。

在数组的头部进行添加

方式一: 使用PHP内置函数array_unshift();

返回值:添加元素后数组的长度
语法:array_unshift(数组变量, 值)
栗子:
    array_unshift($arr, 1);

在数组的任意位置进行添加

方式一: 使用PHP内置函数array_splice();

返回值:添加元素后数组的长度
语法:array_splice(数组变量, 位置, 0, 值)
栗子:
    array_splice($arr, 1, 0, 1);

3.3.3 删除元素

删除头部元素

方式一: 使用PHP内置函数array_shift();

返回值:被删除的第一个元素
语法:array_shift(数组变量)
栗子:
    array_splice($arr);

方式二: 使用PHP内置函数array_splice();

返回值:被删除的第一个元素
语法:array_shift(数组变量, 0, 1)
栗子:
    array_splice($arr, 0, 1);

删除尾部元素

方式一: 使用PHP内置函数array_pop();

返回值:被删除的元素
语法:array_pop(数组变量)
栗子:
    array_pop($arr);

方式二: 使用PHP内置函数array_splice();

返回值:被删除的元素
语法:array_shift(数组变量, -1)
栗子:
    array_splice($arr, -1);

删除任意位置元素

方式一: 使用PHP内置函数array_splice();

返回值:被删除的元素
语法:array_shift(数组变量, 要删除的位置, 要删除的个数)
栗子:
    从第一个元素开始,删除5个连续的元素
        array_splice($arr, 0, 5);
    删除从倒数第5个开始连续的3个元素
        array_splice($arr, -5, 3);

未完,待续。。。。。。