6

我对 php 比较陌生,很难找出要使用的正确数据结构。假设我有一个类 FooBarequals()hashCode()正确实现。php 中什么样的集合(如果有的话)最类似于 Java 的 hashSet?我需要一个没有重复的对象集合。有人建议使用数组和函数array_key_exists,但我只是想知道是否还有另一种方法可以做到这一点?

4

2 回答 2

3

标准 PHP 库 (SPL) 提供的 PHP 编程语言中可用的数据结构很少。尽管与 Java Collections Framework 实现相比它们算不上什么,但有时它们通过提供比数组更高级的功能非常有用。您可以在此处找到可用数据结构的文档。

PHP 中最类似于​​ HashSet 的数据结构是SplObjectStorage

从文档中:

SplObjectStorage 类提供从对象到数据的映射,或者通过忽略数据,提供对象集。这种双重目的在许多需要唯一标识对象的情况下很有用。

PHP 中的对象不实现equals()hashCode()方法。对象的唯一性由spl_object_hash()函数返回的值决定。类使用相同的值SplObjectStorage来唯一标识它包含的对象。该SplObjectStorage::getHash($object)方法可用于检索SplObjectStorage集合中包含的对象的标识符。

于 2012-05-16T07:32:21.993 回答
3

从 5.2 版开始,Php 提供了 SplObjectStorage,它提供了 Java 的 Set 功能:

  • 关心唯一性(同一个对象不能重复添加)
  • 易于遍历集合
  • 易于检查集合中是否存在对象

检查http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorage的使用示例

于 2012-05-16T07:21:08.717 回答