2009-07-30 26 views
5

PHP có hàm in_array để kiểm tra xem một giá trị cụ thể có tồn tại trong một mảng/tập hợp gốc không. Tôi đang tìm một hàm/phương thức tương đương cho ArrayObject, nhưng không có hàm nào trong số methods xuất hiện để nhân đôi chức năng này.ArrayObject của PHP có tương đương in_array không?

Tôi biết tôi có thể truyền ArrayObject dưới dạng mảng (mảng) và sử dụng nó trong in_array. Tôi cũng biết tôi có thể tự lặp qua ArrayObject và tìm giá trị. Không có vẻ như là "đúng" cách để làm điều này.

"Không" là câu trả lời hoàn toàn phù hợp nếu bạn có thể trả lời bằng chứng.

+0

Tài liệu bạn đã cung cấp dường như cho thấy rõ ràng rằng không có phương pháp như vậy. Nói một cách dã man, chúng ta không thể thực sự chứng minh được rằng không có chức năng nào tồn tại. Tài liệu được liên kết là tất cả bằng chứng bạn sẽ nhận được. –

+1

Những người làm việc trên lõi PHP có thể có thêm thông tin. Những người đã gặp sự cố và gửi báo cáo lỗi có thể có thêm thông tin. Tài liệu PHP OO thường không bao gồm mọi thứ có thể. Tôi có thể đã bỏ lỡ một cái gì đó hiển nhiên. Chỉ vì ** bạn ** không thể trả lời câu hỏi không có nghĩa là không có câu trả lời. –

Trả lời

7

số Thậm chí bỏ qua các tài liệu, bạn có thể nhìn thấy nó cho chính mình

echo '<pre>'; 
print_r(get_class_methods(new ArrayObject())); 
echo '</pre>'; 

Vì vậy, bạn chỉ còn lại vài lựa chọn. Một tùy chọn, như bạn nói, là bỏ nó

$a = new ArrayObject(array(1, 2, 3)); 
if (in_array(1, (array)$a)) 
{ 
    // stuff 
} 

Đó là, IMO, tùy chọn tốt nhất. Bạn có thể sử dụng phương thức getArrayCopy() nhưng có lẽ đắt hơn thao tác đúc, chưa kể rằng lựa chọn sẽ có ngữ nghĩa có vấn đề.

Nếu đóng gói là mục tiêu của bạn, bạn có thể làm cho lớp con của riêng bạn ArrayObject

class Whatever extends ArrayObject 
{ 
    public function has($value) 
    { 
    return in_array($value, (array)$this); 
    } 
} 

$a = new Whatever(array(1, 2, 3)); 
if ($a->has(1)) 
{ 
    // stuff 
} 

tôi không khuyên bạn nên lặp lại ở tất cả, đó là O (n) và chỉ cần không có giá trị nó cho các lựa chọn thay thế.

+1

"Tôi không khuyên bạn nên lặp lại ở tất cả, đó là O (n)" 'in_array' là chính nó O (n), không? –

Các vấn đề liên quan