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


110
$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 $ all chứa tất cả các giá trị $ search_this và trả về true hay false. bất kỳ ý tưởng xin vui lòng?



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

Câu trả lời:


159

Nhìn vào array_intersect () .

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

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

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

4
Và thậm chí sau đó: so sánh mảng : " ==TRUE nếu $ a và $ b có cùng cặp khóa / giá trị." , Do đó thứ tự thực hiện thậm chí không quan trọng (sử dụng ===cho điều đó)
Wrikken

2
Câu trả lời này giả định rằng mảng $ all chỉ chứa các giá trị duy nhất. Nếu không đúng như vậy, người ta có thể sử dụng hàm array_unique trên mảng $ all trong hàm array_intersects.
Phát hành

5
array_diff giải pháp @orrd đã có nhiều bụi
Joseph Connolly

223

Các câu trả lời trước đây đều đang làm nhiều việc hơn mức cần thiết. Chỉ cần sử dụng array_diff . Đây là cách đơn giản nhất để làm điều đó:

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

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


4
Cảm ơn vì khoảnh khắc aha; Tôi đã suy nghĩ array_intersect.
Derek Illchuk

19
đây sẽ là câu trả lời
Ma-thi-ơ

2
Vâng đó là giải pháp tốt hơn như vậy
Oleksandr Diudiun

1
Giải pháp tốt hơn giao nhau!
TheBosti

1
Tôi đã xem qua trang này và sử dụng giải pháp trên vì nó chiếm các bản sao
Rayzor

9

Ngắn hơn một chút với Ngắn 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


0

Còn cái này thì sao:

function array_keys_exist($searchForKeys = array(), $searchableArray) {
    $searchableArrayKeys = array_keys($searchableArray);

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.