2012-05-16 12 views
5

Ich bin relativ neu zu PHP und habe eine harte Zeit herauszufinden, die richtige Datenstruktur zu verwenden. Nehmen wir an, ich habe eine Klasse FooBar mit equals() und hashCode() ordnungsgemäß implementiert. Welche Art von Sammlung in PHP (wenn es überhaupt welche gibt), die dem Java-HashSet am ähnlichsten ist? Ich brauche eine Sammlung von Objekten ohne Duplikate. Jemand hat vorgeschlagen, Array und die Funktion array_key_exists zu verwenden, aber ich habe mich nur gefragt, ob es eine andere Möglichkeit gibt, dies zu tun?Java HashSet entspricht in PHP

+0

Arrays wären der richtige Weg. Sie können die array_unique-Funktion von PHP verwenden, um ein Array ohne Duplikate zu extrahieren oder array_key_exists vor dem Einfügen zu verwenden. –

Antwort

3

von Ab Release 5.2 Php SplObjectStorage bietet, dass Funktionalitäten von Java Set bietet:

  • kümmert sich um Einzigartigkeit (gleiche Objekt kann nicht zweimal hinzugefügt werden)
  • Einfach durch die Sammlung iterieren
  • leicht zu überprüfen Existenz eines Objekts in der Sammlung

prüfen http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorage zum Beispiel Nutzungs

2

In der PHP-Programmiersprache der Standard-PHP-Bibliothek (SPL) sind nur wenige Datenstrukturen verfügbar. Obwohl sie im Vergleich zu den Java Collections Framework-Implementierungen nichts sind, können sie manchmal sehr nützlich sein, indem sie eine erweiterte Funktionalität als die der Arrays bereitstellen. Sie finden die Dokumentation der verfügbaren Datenstrukturen here. Die meisten HashSet-ähnlichen Datenstrukturen in PHP wären SplObjectStorage.

Aus der Dokumentation:

Die SplObjectStorage-Klasse stellt eine Karte von Objekten auf Daten oder durch Daten, einen Objektsatz zu ignorieren. Dieser doppelte Zweck kann in vielen Fällen nützlich sein, wenn Objekte eindeutig identifiziert werden müssen.

Objekte in PHP implementieren die Methoden equals() und hashCode() nicht. Die Eindeutigkeit von Objekten wird durch den Wert bestimmt, der von der -Funktion zurückgegeben wird. Derselbe Wert wird von der Klasse SplObjectStorage verwendet, um die darin enthaltenen Objekte eindeutig zu identifizieren. Die SplObjectStorage::getHash($object) Methode kann verwendet werden, um die Kennung eines Objekts in der SplObjectStorage Sammlung abzurufen.