上一次修改时间:2018-06-14 02:55:46

php数组及应用

  1. 内容目录

    image.png

  2. php数组定义

    image.png

    image.png

    image.png

    image.png

    php实现该类后:

    image.png

    image.png

    打印的结果为:

    image.png

    注:打印该对象时,会执行一个循环,循环里去调用offersetGet函数;php手册有相关内容

    image.png 

  3. 数组key和value的限制条件

    image.png

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

    image.png

    image.png 

  4. 数组的访问

    image.png

    image.png

    数组间接引用函数示例:

    image.png

  5. 数组元素的删除

    image.png

    image.png

    打印的结果为:image.png

  6. php中数组与其它类型的转换

    image.png

    转换规则为:

    image.png

    image.png

    image.png

    打印结果为:

    image.png

  7. 数组的遍历

    php数组的遍历方法有:

    image.png

    image.png

    image.png

    image.png

    image.png

    执行的结果为:

    image.png

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

    image.png

    image.png

    注:没有加引用符号&时,不会出现这种问题; 

  8. php数组的内部实现

    image.png

    image.png

    image.png

    image.png

  9. php数组的底层定义

    image.png

    注:1)nTableSize里存储是数组所能存储的元素的个数,该值在数组初始化时会确定(确定该值后就可以计算出数组的字节数组,从而去申请相应的内存块),当实际的元素个数超过了该值时,会自动扩容;

    2)nTableMash(掩码),因为 nTableSize的值为2^n,nTableMash的值的二进制的有效位都是1,如n=8时,nTableMash的值为1111 1111,此时任何值与nTableMash进行与操作,得到的值都会小于nTableMash的值;

    image.png

    注:php里所有变量都是 写时复制 ,即复制某个变量(或将一个变量赋值给另一时),只会将变量的地址赋值给另外的一个,只有当两个变量之中,有一个的值有改变时,才会去真正的申请内存存储;

    bucket里的pNext和pLast是用来解决哈希冲突的,哈希冲突即不同的值在哈希后,哈希值相同;

    image.png

    image.png 

  10. HashTable扩容

    image.png

    注:image.png表示2的14次方,上图中右边的代码运行结果为:

    image.png 

  11. php数组排序的原理

    image.png

    image.png

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

  12. php位运算

    image.png

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

    image.png

  13. php输入流

    image.png

    image.png

  14. php数组与数据结构

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    QQ图片20180614025450.png