2011-10-23 9 views
5

Nếu tôi sử dụng:ID độc đáo với thời gian()

$t = time(); 
echo $t; 

chí này ra cái gì đó như: 1319390934

Tôi có hai câu hỏi:

  1. Giá trị này có thể được sử dụng như id duy nhất?
  2. cách tạo từ ngày đó?

Tôi không thể sử dụng uniqid(), vì tôi cần giá trị có thể được sử dụng để đặt hàng (gần đây).

+0

Duy nhất trong ngữ cảnh nào? Bạn đang sử dụng ID như thế nào? ('microtime()' cũng thường được sử dụng cho ID duy nhất). –

+0

trong trường hợp này là một số không thể lặp lại. giống như một chỉ mục duy nhất trong sql. – user947462

+0

Tại sao không sử dụng cơ sở dữ liệu tự động tăng? – Manhim

Trả lời

9

Sử dụng time() như đã đề cập sẽ cung cấp cho bạn một cách sắp xếp được để tạo ID duy nhất. chuỗi concatenating cũng sẽ tiếp tục ngẫu nhiên kết quả mong muốn của bạn và vẫn giữ cho nó có thể phân loại:

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

'microtime' có thể sắp xếp ??? Bạn đã nhìn vào những gì nó trở về? – Jon

+1

Có đảm bảo rằng bạn ở mt_rand, hai người dùng thông minh khác có thể có cùng một id duy nhất nếu họ đến đúng chính xác cùng một lúc. – Mike

4
  1. Rõ ràng điều này không thể được sử dụng làm id "duy nhất" vì, tốt, nó không phải là duy nhất trong suốt thời gian của cùng một giây.
  2. Nhìn vào date.

Nếu bạn muốn một cái gì đó được quảng cáo như một id duy nhất cả hai có thể được sắp xếp, bạn có thể sử dụng một cái gì đó như thế này có liên quan đến uniqid:

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

Tôi đang có lẽ quá đơn giản hóa ở đây , cho rằng tất cả các giá trị time sẽ sản xuất sẽ có cùng số chữ số (để sắp xếp chuỗi sẽ tạo ra kết quả tương tự như natural sort). Nếu bạn không muốn làm cho giả định này, sau đó bạn có thể xem xét

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

Vì nó dành cho cơ sở dữ liệu, cột 'auto_increment' được kết hợp với cột' NOW() 'cũng có thể hoạt động, tùy thuộc vào việc sử dụng. –

1

Nếu bạn đang sử dụng mã này trong một môi trường mà bạn có một tài khoản người dùng với một ID duy nhất, bạn có thể thêm thời gian() để họ ID tài khoản để tạo ID duy nhất.

Bạn có thể bật thời gian() trở thành một chuỗi ngày sử dụng:

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

Tất nhiên định dạng ngày có thể được thay đổi sử dụng bất kỳ ngày của PHP) định dạng (.