2012-02-24 22 views
8

Tôi đã có một mảng mà trông như thế này:array_intersect, nhưng đối với một phụ mảng của một mảng đơn biến

$foo = array(
    0 => array('a', 'b', 'c', 'd'), 
    1 => array('b', 'c', 'd'), 
    2 => array('b', 'd', 'f') 
) 

tôi sẽ đề cập đến $foo[0], $foo[1], và $foo[2] như tiểu mảng.

Tôi về cơ bản cần thực hiện array_intersect() trên tất cả 3 mảng phụ trong $foo. Kết quả phải là:

array('b', 'd') 

Vì cả ba mảng phụ đều có những giá trị chung này. Cách tốt nhất để làm việc này là gì?

Một số lưu ý:

  • Sẽ luôn có ít nhất một phụ mảng. Không có giới hạn trên.
  • Nếu chỉ có một tiểu mảng được cung cấp, nó sẽ trả về mà phụ mảng
  • Nếu không có bất kỳ giá trị phổ biến ở tất cả các tiểu mảng, một mảng trống nên được trả lại
  • Nếu chức năng này đã tồn tại như một hàm PHP, tôi sẽ/facepalm
+1

Check-out http://stackoverflow.com/questions/4704166/comparing-multidimensional -array –

Trả lời

23
$intersect = call_user_func_array('array_intersect',$foo); 

Lưu ý rằng các phím được bảo quản từ $ foo [0]

+4

Clev er cách tiếp cận, tôi thích nó! Nó hoạt động tốt nếu '$ foo' có ít nhất 2 mảng phụ, nhưng không thành công nếu chỉ có một. Tôi đã sửa lỗi này bằng cách chỉ gọi hàm trên nếu 'count ($ foo)> 1'. Nếu 'count ($ foo) == 1' tôi chỉ trả về mảng phụ duy nhất. Cảm ơn! –

+0

Cảm ơn bạn @ ColinO'Dell '$ currency = count ($ currency)> 1? call_user_func_array ('array_intersect', $ currency): array_shift ($ currency); ' ** LƯU Ý: ** Tôi đang typecasting (array) trên $ currency để mảng_shift trả về' [] '. – Michael

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