7

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

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

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

4

4 回答 4

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';

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

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

于 2010-07-02T14:18:40.903 回答
2

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

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

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

于 2010-07-02T19:09:42.163 回答
1

使用标准数组,它比 ArrayObject 更快。

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

于 2010-07-02T14:10:08.757 回答
0

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

然后存在SplDoublyLinkedList、SplQueue、SplHeap。加上数组对象。

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

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

恕我直言,它来得太晚了。

于 2014-08-19T15:37:25.897 回答