【问题标题】:SPL vs. Array: When should we use SPL and when should we use Array in PHP?SPL vs. Array:我们什么时候应该使用 SPL,什么时候应该在 PHP 中使用 Array?
【发布时间】:2011-03-11 03:11:13
【问题描述】:

在 java 和 C++ 中,当我们不知道大小时 - 数组不像 PHP 中那样使用,而是使用 linkedList 等。

PHP中存在SPL,但程序员大多使用数组,为什么(因为人们不知道SPL)?

我们什么时候应该在 PHP 中使用 Array 和 whenSPL,在这种情况下 PHP 和 Java/C++ 有什么区别?

【问题讨论】:

标签: php arrays spl


【解决方案1】:

也许不一定会造成混淆,因为人们可以决定使用“SplStack”而不是与 array_push/pop 函数关联的普通数组。或者以经典方式使用数组,

然后存在SplDoublyLinkedList、SplQueue、SplHeap。加上 ArrayObject。

所以这个问题是有效的。答案是:你用更Java的方式做同样的事情,而且速度更慢。

一般来说,SPL 是模仿标准和“现成”类和 API 的尝试,就像存在于 C++ 和 Java 中一样。

恕我直言,来得太晚了。

【讨论】:

    【解决方案2】:

    您要求我们比较两个大量不同的东西,几乎唯一的相似之处是它们都(数组和 SPL)在 PHP 中可用。

    为此,直接比较或规定何时应该使用一个而不是另一个来完成一项任务的时间基本上是荒谬的。需要注意的是,both 可能会交织使用:例如,使用 ArrayIterator 迭代数组,或使用 ArrayObject 在处理对象时使用数组样式的语法。

    您似乎也对 SPL 是什么感到困惑或不清楚;它当然仅限于用于迭代事物集合的工具。您是想询问图书馆的特定部分,还是只是不清楚其中有哪些内容?

    【讨论】:

    • 我觉得我对 SPL 有点怀疑
    【解决方案3】:

    每个 PHP 请求都必须初始化所有变量,并在请求后释放它们。因此,特殊数据结构(如 maxheap、linkedlist 或 queue)比数组更有效的情况并不常见。 此外,数组对于初学者来说更易于理解和使用。

    与 PHP 中的 C++ 的区别在于数组长度是动态的。您可以随时添加元素。

    $arr=array();
    $arr[]=5; //add integer to array
    echo count($arr); //1
    $arr[]=7;
    echo count($arr); //2
    

    您可以动态创建数组并将其添加到另一个数组中

    $arr[]=array();
    $arr[2][]=5;
    echo count($arr); //3
    echo count($arr[2]); //1
    

    这将创建新数组,添加值为 5 的元素并将其作为元素添加到数组 $arr。

    $arr[][]=5;
    

    在 PHP 中,数组是哈希表,所以你不仅可以有整数键,还可以有字符串:

    $arr['somekey']='somevalue';
    

    如果数组元素是整数,那么每个元素都需要一个值结构 (zval),它占用 16 个字节。还需要一个哈希桶——占用 36 个字节。每个值有 52 个字节。内存分配标头占用另外 8 个字节*2 - 即 68 个字节。

    关于 PHP 中的数组:http://oreilly.com/catalog/progphp/chapter/ch05.html

    【讨论】:

    • 动态php数组意味着每次插入新元素都会创建新数组。或者例如 php 数组的默认大小为 100 个单元格,如果数组需要超过 100 个单元格,则她会增加 2 等..??
    • 每次创建新元素时,都会为变量分配新内存,并为哈希分配新内存。
    【解决方案4】:

    使用标准数组,比ArrayObject快。

    仅使用 ArrayObject 来使用您的自定义方法实现您自己指定的数组。

    【讨论】:

    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多