2012-05-16 12 views
5

Soy relativamente nuevo en php y tengo dificultades para encontrar la estructura de datos correcta para usar. Digamos que tengo una clase FooBar con equals() y hashCode() correctamente implementada. ¿Qué tipo de colección en php (si es que hay alguna) que más se parece al hashSet de Java? Necesito una colección de objetos sin duplicados. Alguien sugirió usar array y la función array_key_exists, pero me preguntaba si hay otra forma de hacerlo.Equivalente de HashSet de Java en PHP

+0

Arrays sería el camino a seguir. Puede usar la función array_unique de PHP para extraer una matriz sin duplicados o usar array_key_exists antes de insertarla. –

Respuesta

3

partir de la versión 5.2 de PHP ofrece SplObjectStorage, que ofrece funcionalidades de Conjunto de Java:

  • se preocupa por la singularidad (el mismo objeto no se puede añadir dos veces)
  • Fácil de recorrer la colección
  • fácil de comprobar la existencia de un objeto en la colección

Comprobar http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorage por ejemplo del uso

2

Hay pocas estructuras de datos disponibles en el lenguaje de programación PHP proporcionado por la biblioteca estándar de PHP (SPL). Aunque no son nada en comparación con las implementaciones de Java Collections Framework, a veces pueden ser muy útiles al proporcionar una funcionalidad más avanzada que la de las matrices. Puede encontrar la documentación de las estructuras de datos disponibles here.

La estructura de datos más similar a HashSet en PHP sería SplObjectStorage.

De la documentación:

La clase SplObjectStorage proporciona un mapa de los objetos a los datos o, al ignorar los datos, un conjunto de objetos. Este doble propósito puede ser útil en muchos casos que involucran la necesidad de identificar objetos de manera única.

Objetos en PHP no implementan las equals() y los métodos hashCode(). La unicidad de los objetos está determinada por el valor devuelto por la función spl_object_hash(). El mismo valor es utilizado por la clase SplObjectStorage para identificar de manera única los objetos que contiene. El método SplObjectStorage::getHash($object) se puede usar para recuperar el identificador de un objeto contenido en la colección SplObjectStorage.