2012-05-16 12 views
5

Sono relativamente nuovo su php e ho difficoltà a trovare la struttura dati corretta da utilizzare. Diciamo che ho una classe FooBar con equals() e hashCode() correttamente implementata. Che tipo di raccolta in php (se ce n'è una) che somiglia di più all'hashSet di Java? Ho bisogno di una collezione di oggetti senza duplicati. Qualcuno ha suggerito di usare l'array e la funzione array_key_exists, ma mi stavo chiedendo se c'è un altro modo per farlo?Equivalente HashSet di Java in PHP

+0

Gli array sarebbero la strada da percorrere. Puoi usare la funzione array_unique di PHP per estrarre un array senza duplicati, o usare array_key_exists prima di inserirlo. –

risposta

3

A partire dalla release 5.2 PHP offre SplObjectStorage, che offre funzionalità di Set di Java:

  • si preoccupa per l'unicità (stesso oggetto non possono essere aggiunti due volte)
  • Facile scorrere l'insieme
  • facile da verificare l'esistenza di un oggetto della collezione

Controllare http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorage per esempio di utilizzo

2

Ci sono poche strutture dati disponibili nel linguaggio di programmazione PHP fornito dalla libreria PHP standard (SPL). Sebbene non siano nulla rispetto alle implementazioni di Java Collections Framework, a volte possono essere molto utili fornendo funzionalità più avanzate rispetto a quelle degli array. È possibile trovare la documentazione delle strutture dati disponibili here.

La struttura di dati più simile a HashSet in PHP è SplObjectStorage.

Dalla documentazione:

La classe SplObjectStorage fornisce una mappa dagli oggetti ai dati o, ignorando i dati, un set di oggetti. Questo duplice scopo può essere utile in molti casi che richiedono la necessità di identificare gli oggetti in modo univoco.

oggetti in PHP non implementano i metodi ei hashCode()equals(). L'unicità degli oggetti è determinata dal valore restituito dalla funzione spl_object_hash(). Lo stesso valore viene utilizzato dalla classe SplObjectStorage per identificare in modo univoco gli oggetti che contiene. Il metodo SplObjectStorage::getHash($object) può essere utilizzato per recuperare l'identificatore di un oggetto contenuto nella raccolta SplObjectStorage.