2015-06-15 18 views
10

Ecco a volte faccio molto in PHP. Alla ricerca di un ago in un pagliaio.Utilizzare i valori come chiavi negli array per ridurre la complessità durante la ricerca di elementi

$names = [ 
    'Mike', 
    'John', 
    'Dave', 
    'Tony' 
]; 

$gotDave = in_array('Dave', $names); 

Il runtime di in_array è O (n) dove n è il numero di elementi.

Ho spesso impostato la struttura dei dati di ricerca in modo che assomigli a questo.

$names = [ 
    'Mike' => true, 
    'John' => true, 
    'Dave' => true, 
    'Tony' => true 
]; 

$gotDave = isset($names['Dave']); 

Il tempo di esecuzione è O (1) perché in PHP array associativo è un hashmap.

Alcune domande:

  • devo fare questo? è questa buona pratica?
  • c'è un valore migliore per il diritto giro mano
+2

Personalmente non ho potuto criticare questo. – Pogrindis

+0

Solo per curiosità: cosa intendi con "* Il tempo di esecuzione di in_array è' O (n) '*"? Cosa significa 'O'? – D4V1D

+0

@ D4V1D n = numero di elementi all'interno dell'array –

risposta

1

Sì, è una grande soluzione. In effetti, questo è il modo in cui i Set vengono implementati nelle librerie principali della maggior parte dei linguaggi di programmazione - In cima alla mia testa, Python, Ruby e Java li fanno in questo modo. La lingua Go non fornisce un Set e ti dice semplicemente di fare ciò che hai fatto.

Non riesco a pensare ad alcun motivo per utilizzare qualsiasi valore diverso da true `` `true``. Ha senso.

-1

è possibile utilizzare array_key_exists() per verificare la chiave della matrice, a differenza in_array che verifica la presenza di valori

si dovrà utilizzare array_key_exists() invece di isset() nel tuo caso

Problemi correlati