• 技术文章 >php教程 >php手册

    关于PHP中数组模型的一点猜想(by misko lee)

    2016-06-13 10:52:15原创621
    根据我个人的理解,数组在内存中应该是一片连续的空间。在数组使用前需要在内存中开辟一片规定大小的空白内存,如果声明的大小小于可用的连续内存大小,应该报内存溢出的错误。
    对于使用过PHP数组的童鞋应该能够很快速的判断出PHP中的数组并不具备以上特点。一,数组声明无需进行size的确定;二,数组没有使用上限。通过这两点,我们可以判断出,PHP中的数组是链表式的松散结构,而不是连续内存空间。
    PHP中的数组可以分为索引数组以及关联数组两种形式。索引数组是一种计数型的数组结构。而关联数组则是map数据结构的一种实现,也就是key-value的结构。
    我们通过以下的例子就索引数组和关联数组进行一些讨论。
    $arr=array(1,2,3,'name'=>'misko_lee','age'=>22); //定义一个索引、关联混合型数组
    for($i=0;$i echo $arr[$i]; //这里我们可以看到下标溢出的错误提示

    Cout($arr)函数调用返回$arr数组的长度。但是for循环只能够正常输出索引数组。因而,我们可以判断,索引数组与关联数组是两种不同的实现。因而也证明了PHP中的数组是松散型的结构的猜想。
    关于索引数组我们还有以下猜想:
    $arr[100]=100;
    $arr[]=101; //此时$arr[]自动增长的下标为101。

    上面的实验证明了我们的猜想,PHP中的数组计数器并不是从数组内存首地址开始计数,而是一种伪计数方式。因此,利用计数器去判断数组大小是完成错误的。
    以上言论是个人胡言乱语,具有十分不可靠的因素。欢迎各位学长童鞋指出错误。好人一生平安。
    最后PS一句:数组使用foreach遍历后如果不是需求原因,请将数组指针利用reset()函数进行遍历重置

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:thinkphp模型过滤查询字段,表达式方法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 我的论坛源代码(五)• 使用PHP4.2.0及以后版本的注意事项• PHP之判断用户语言跳转网页• PHP 修改RAR文件注释及添加压缩文档讲解• php 树型结构操作类代码(1/4)
    1/1

    PHP中文网