2013-04-10 25 views
10

Tôi nghi ngờ những gì để sử dụng:Điều gì là tốt hơn để sử dụng: in_array hoặc array_unique?

foreach(){ 
    // ..... 

    if(!in_array($view, $this->_views[$condition])) 
     array_push($this->_views[$condition], $view); 

    // .... 
} 

HOẶC

foreach(){ 
    // ..... 

    array_push($this->_views[$condition], $view); 

    // .... 
} 

$this->_views[$condition] = array_unique($this->_views[$condition]); 

CẬP NHẬT

Mục đích là để có được hàng loạt các giá trị duy nhất. Điều này có thể được thực hiện bằng cách kiểm tra mỗi lần nếu giá trị đã tồn tại với in_array hoặc thêm tất cả các giá trị mỗi lần và cuối cùng sử dụng array_unique. Vì vậy, có bất kỳ sự khác biệt lớn giữa hai cách này?

+0

Đọc tài liệu, 'array_unique' loại bỏ giá trị trùng lặp trong một mảng cho ...' in_array' cung cấp một tìm kiếm vào các giá trị mảng và trả về một đúng/sai nếu tìm thấy/không tìm thấy –

+2

@DarylGill tôi biết những gì chức năng này có, nhưng tôi muốn biết những ví dụ được cung cấp là tốt hơn – user1692333

+0

Bạn chưa cung cấp đủ thông tin tại sao bạn bị mắc kẹt với hai chức năng này, trong bối cảnh nào chúng đang được sử dụng, v.v. –

Trả lời

7

Tôi nghĩ cách tiếp cận thứ hai sẽ hiệu quả hơn. Trong thực tế, array_unique sắp xếp mảng rồi quét nó.

Việc sắp xếp được thực hiện trong các bước N log N, sau đó quét sẽ thực hiện N bước.

Cách tiếp cận đầu tiên có N^2 bước (phần tử foreach quét tất cả các phần tử trước đó N). Trên mảng lớn, có một sự khác biệt rất lớn.

+1

+1 cho phương pháp thứ hai. Đây là một đoạn mã (đoạn mã) tốt với so sánh theo mili giây: https://gist.github.com/Ocramius/7453564 –

2

Thành thật mà nói nếu bạn đang sử dụng một tập dữ liệu nhỏ, không quan trọng bạn sử dụng tập dữ liệu nào. Nếu tập dữ liệu của bạn ở mức 10000, bạn chắc chắn sẽ muốn sử dụng bản đồ băm cho loại điều này.

Điều này giả định rằng chế độ xem là một chuỗi hoặc một thứ gì đó, trông giống như vậy. Đây thường là O (n) và có thể là cách nhanh nhất để xử lý theo dõi các giá trị duy nhất.

foreach($views as $view) 
{ 
    if(!array_key_exists($view,$unique_views)) 
    { 
     $unique_views[$condition][$view] = true; 
    } 
} 
Các vấn đề liên quan