内容目录

php数组定义




php实现该类后:


打印的结果为:

注:打印该对象时,会执行一个循环,循环里去调用offersetGet函数;php手册有相关内容;
数组key和value的限制条件

上面的两个代码打印结果为:

数组的访问


数组间接引用函数示例:

数组元素的删除


打印的结果为:
php中数组与其它类型的转换

转换规则为:



打印结果为:

数组的遍历
php数组的遍历方法有:





执行的结果为:

注:数组的遍历是按存储的顺序进行的,不会对key进行自动排序;


注:没有加引用符号&时,不会出现这种问题;
php数组的内部实现




php数组的底层定义

注:1)nTableSize里存储是数组所能存储的元素的个数,该值在数组初始化时会确定(确定该值后就可以计算出数组的字节数组,从而去申请相应的内存块),当实际的元素个数超过了该值时,会自动扩容;
2)nTableMash(掩码),因为 nTableSize的值为2^n,nTableMash的值的二进制的有效位都是1,如n=8时,nTableMash的值为1111 1111,此时任何值与nTableMash进行与操作,得到的值都会小于nTableMash的值;

注:php里所有变量都是 写时复制 ,即复制某个变量(或将一个变量赋值给另一时),只会将变量的地址赋值给另外的一个,只有当两个变量之中,有一个的值有改变时,才会去真正的申请内存存储;
bucket里的pNext和pLast是用来解决哈希冲突的,哈希冲突即不同的值在哈希后,哈希值相同;

HashTable扩容

注:
表示2的14次方,上图中右边的代码运行结果为:
php数组排序的原理


注:数组的排序因要申请额外的n(数组元素的个数)个空间,因此该操作是很费空间的;
php位运算

以下为用一个选项表示多项可能的示例,即用二进制的每一位表示一个可能性;

php输入流


php数组与数据结构






