9

array当我不需要任何相关的数组功能时,是否可以使用PHP 的轻量级替代品?据我所知,array内部是一个哈希映射,对于存储简单的元素数组来说是过度且低效的。如果 PHP 有一个类似于 C++ 的类或编程结构std::vector,那就太好了。

参考:http ://www.cplusplus.com/reference/vector/vector/

4

2 回答 2

9

看看 SPL 数据结构。一个例子是http://www.php.net/manual/en/class.splfixedarray.php,它比普通数组更快。

http://www.php.net/manual/en/spl.datastructures.php

于 2013-07-20T13:33:23.583 回答
3

不,PHP 没有严格等同于std::vector.

我们只是使用我们的多用途数组SPL 中的附加数据结构之一,即SplFixedArrayArrayObject以及一些HeapsStacks,但它们实际上都不是等效的。

我能想到的最接近节省内存的方法是Judy Arrays 的 PECL 扩展

PHP Judy 实现了稀疏动态数组(又名 Judy 数组)。此扩展基于 Judy C 库。Judy 数组仅在填充时才消耗内存,但如果需要,可以增长以利用所有可用内存。Judy 的主要优势是可扩展性、高性能和内存效率。

它支持以下模式:

  • BITSET- 将 Judy 数组定义为位集,键为整数,值为布尔值
  • INT_TO_INT- 将键/值定义为整数的 Judy 数组,并且仅限整数。
  • INT_TO_MIXED- 将 Judy Array 的键定义为整数和任何类型的值。
  • STRING_TO_INT- 定义 Judy 数组,其中键为字符串,值为整数,且仅限整数。
  • STRING_TO_MIXED- 将带有键的 Judy 数组定义为字符串和任何类型的值。

你可能想要INT_TO_MIXED. 就像我说的,这是我能想到的最接近的。这是不一样的。我以前从未使用过它,所以我无法判断它是否符合您的效率要求。

您可以在http://lxr.php.net/xref/PECL/Judy/浏览源代码

于 2013-07-20T14:08:21.450 回答