2011-10-23 5 views
5

se uso:ID univoco con il tempo()

$t = time(); 
echo $t; 

Questa volontà di uscita qualcosa di simile: 1319390934

Ho due domande:

  1. Questo valore può essere utilizzato come ID unico?
  2. come generare da esso una data?

Non riesco a utilizzare uniqid(), perché ho bisogno di un valore che può essere utilizzato per ordinare (recenti).

+0

Unico in quale contesto? Come stai usando l'ID? ('microtime()' viene in genere utilizzato anche per ID univoci). –

+0

in questo caso un numero che non può essere ripetuto. come un indice univoco in sql. – user947462

+0

Perché non utilizzare un incremento automatico del database? – Manhim

risposta

9

Utilizzando time() come detto vi darà un modo per creare ordinabile ID univoci. Concatenazione di stringhe anche randomizzare ulteriormente il risultato desiderato e ancora tenerlo ordinabile:

$uniqueId= time().'-'.mt_rand(); 
+0

'microtime' sortable ??? Hai visto cosa restituisce? – Jon

+1

Sì, assicurati che su mt_rand, altri due o più saggi utenti possano avere lo stesso ID univoco se si trovano esattamente nello stesso momento. – Mike

4
  1. Ovviamente questo non può essere utilizzato come ID "univoco" perché, beh, non è unico durante la durata dello stesso secondo.
  2. Cerca su date.

Se si desidera qualcosa che è pubblicizzato come un ID univoco e entrambi possono essere ordinati, si può usare qualcosa di simile che coinvolge uniqid:

$u = time().'-'.uniqid(true); 

I 'm forse troppo semplificando qui , dando per scontato che tutti i valori time producano lo stesso numero di cifre (in modo che un ordinamento di stringa produca gli stessi risultati di uno natural sort). Se non si vuole fare questa ipotesi, allora si potrebbe prendere in considerazione

$u = sprintf("%010s-%s", time(), uniqid(true)); 
+0

Dato che è per un database, una colonna 'auto_increment' accoppiata con una colonna' NOW() 'potrebbe funzionare, a seconda dell'uso. –

1

Se si utilizza questo codice in un ambiente in cui si dispone di un account utente con un ID univoco, è possibile aggiungere il tempo() per la loro ID account per generare un ID univoco.

È possibile attivare il tempo() in una stringa data utilizzando:

$time = time(); 
echo 'The datestamp for (' . $time . ') is ' . date("Y-m-d", $time); 

Naturalmente il formato della data può essere modificata utilizzando uno qualsiasi dei data PHP formato().