在PHP里面使用最多的数据结构恐怕就是数组了,不过PHP的数组和我们传统意义上的数组区别很大,PHP的数组功能上相当于其它语言里面array+list+map数据结构的集合体,这就是动态语言的强大之处。在PHP里面有2种数组,一种是传统的索引数组,另一种是关联数组,其实就是其它语言里面map数据结构。
底层实现
PHP的数组底层是使用HashTable实现,说到哈希表估计很多人都了解过,PHP数组通过一个映射函数把key映射到对于的value值上面,所以查找起来非常快,时间复杂度是O(1),哈希表都会遇到冲突问题,在PHP里面是通过链表的方式解决的。
1 | //Bucket:散列表中存储 |
PHP7源码里面具体涉及到结构体如上,源码我就不解读了,主要是我也不太熟悉,只是看过一些介绍文章,但是希望大家可以了解一下,下面我主要介绍一下PHP数组的一些常用函数,回顾一下基础。
常用函数
PHP的数组函数非常多,但是说起这点我就头疼,PHP的数组函数命名有些非常奇葩,有以**array_**开头的,也有一些不知道根据啥命名的…下面我就分类介绍一下:
1.排序类
1 | // 默认排序是按从低到高,而且是引用传递,第二个参数可以选择排序类型 |
然后是一些以a、r、k、u组合的函数,不得不说这命名是真烂!
1 | a 是associate,意思是排序是保留索引关联,最常见的是 asort |
好了,除了上面这4个之外,其它就是这几个字母的组合的函数了,比如 arsort 是保留索引倒序排序、uksort 使用用户自定义的比较函数对数组中的键名进行排序,其它我就不多说了。
2.遍历类
除了可以使用for 和 foreach循环遍历数组之外,PHP还有很多其它遍历数组,并且操作数组的函数
1 | //为数组的每个元素应用回调函数 |
3.其它
1 | array_flip — 交换数组中的键和值 |
PHP自带的这些数组函数基本上你所想到的操作它都有,没有的也可以组合这些方法创造一个,我记得在laravel框架里面就自带了一个数组集合类,里面就有一些非常好用的方法。
有人问,这么多函数,怎么能记住?
其实我觉得大部分时候并不要死记硬背,面试除外,当你遇到问题的时候至少心里有点数,具体参数可以查下文档,或者使用IDE的联想功能,平时没事多看看官方文档也挺好的。