在PHP中是否有与C ++的std :: vector相同的东西?

时间:2013-07-20 13:31:09

标签: php arrays performance

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

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:3)

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

我们只使用multi-purpose arrays或其中一个additional datastructures in SPL,即SplFixedArrayArrayObject和一些HeapsStacks,但没有它们实际上是等价的。

我能想到的最节省的是PECL extension for Judy Arrays

  

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

它支持以下模式:

  • BITSET - 将Judy数组定义为Bitset,键为整数,值为布尔值
  • INT_TO_INT - 使用键/值作为整数和仅整数来定义Judy数组。
  • INT_TO_MIXED - 使用键作为整数和任何类型的值定义Judy数组。
  • STRING_TO_INT - 定义Judy数组,其中键为字符串,值为整数,仅为整数。
  • STRING_TO_MIXED - 使用键作为字符串和任何类型的值定义Judy数组。

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

您可以在http://lxr.php.net/xref/PECL/Judy/

浏览源代码