2012-03-11 35 views
63
$all = array 
(
    0 => 307, 
    1 => 157, 
    2 => 234, 
    3 => 200, 
    4 => 322, 
    5 => 324 
); 
$search_this = array 
(
    0 => 200, 
    1 => 234 
); 

Tôi muốn tìm hiểu xem $ có chứa tất cả các giá trị $ search_this và trả về đúng hay sai. bất kỳ ý tưởng xin vui lòng?php kiểm tra xem mảng có chứa tất cả các giá trị mảng từ một mảng khác không

+1

có thể trùng lặp của [Kiểm tra để xem nếu các yếu tố một mảng của là trong một mảng trong PHP] (http://stackoverflow.com/questions/523796/checking-to -see-if-một-mảng-yếu tố-là-trong-khác-array-in-php) –

+0

@VishalKumarSahu Không hoàn toàn trùng lặp: Liên kết đã cho của bạn phải làm với việc kiểm tra xem có phần tử nào được chứa trong mảng khác không, nếu không TẤT CẢ các phần tử được chứa trong một phần tử khác. – Stefan

Trả lời

118

Nhìn vào array_intersect().

$containsSearch = count(array_intersect($search_this, $all)) == count($search_this); 
+4

Bạn biết bạn có thể bỏ qua cả hai cuộc gọi 'count()'? – Wrikken

+0

@Wrikken Không thể sắp xếp lại các giá trị trong 'mảng_intersect()'? Ý tôi là, '['a', 'b']! = ['B', 'a']'. – sbichenko

+1

@exizt: 'array_intersect()' không thay đổi mảng đầu vào, vì vậy '$ search_this' &' $ all' an toàn (nó chỉ trả về kết quả đầu ra). Chữ ký hàm là 'mảng array_intersect (mảng $ array1, mảng $ array2 [, mảng $ ...])' (an toàn). Nếu nó sẽ/có thể thay đổi chúng, nó sẽ là 'mảng array_intersect (mảng & $ array1, mảng & $ array2 [, mảng & $ ...])' (có thể thay đổi các đối số đầu vào). Ngoài ra, các phím của '$ search_this' là _preserve_, và thứ tự của mảng đầu tiên được giữ lại. Vì vậy, cả hai cặp khóa/giá trị, như thứ tự của chúng, khớp nhau. – Wrikken

2

Tôi nghĩ rằng bạn đang tìm kiếm các chức năng giao nhau

array array_intersect (array $array1 , array $array2 [, array $ ... ]) 

array_intersect() trả về một mảng chứa tất cả các giá trị của array1 có hiện diện trong tất cả các đối số. Lưu ý rằng các phím được giữ nguyên.

http://www.php.net/manual/en/function.array-intersect.php

+0

cảm ơn, nó hoạt động! :) – peter

6

Một chút ngắn hơn với array_diff

$musthave = array('a','b'); 
$test1 = array('a','b','c'); 
$test2 = array('a','c'); 

$containsAllNeeded = 0 == count(array_diff($musthave, $test1)); 

// this is TRUE 

$containsAllNeeded = 0 == count(array_diff($musthave, $test2)); 

// this is FALSE 
113

Những câu trả lời trước đó đều làm công việc nhiều hơn họ cần. Chỉ cần sử dụng array_diff. Đây là cách đơn giản nhất để thực hiện:

$containsAllValues = !array_diff($search_this, $all); 

Đó là tất cả những gì bạn phải làm.

+3

Cảm ơn thời điểm aha; Tôi đã suy nghĩ về 'mảng_intersect'. –

+6

đây phải là câu trả lời – Matthew

+1

Có giải pháp tốt hơn như vậy – noonehos

0

Làm thế nào về điều này:

function array_keys_exist($searchForKeys = array(), $searchableArray) { $searchableArrayKeys = array_keys($searchableArray); return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); }

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