Câu trả lời:
Giao nhau giữa các mục tiêu bằng đống cỏ khô và đảm bảo rằng điểm giao cắt chính xác bằng các mục tiêu:
$haystack = array(...);
$target = array('foo', 'bar');
if(count(array_intersect($haystack, $target)) == count($target)){
// all of $target is in $haystack
}
Lưu ý rằng bạn chỉ cần xác minh kích thước của giao điểm kết quả có cùng kích thước với mảng các giá trị mục tiêu để nói rằng đó $haystack
là tập siêu của $target
.
Để xác minh rằng ít nhất một giá trị trong $target
cũng có $haystack
, bạn có thể thực hiện kiểm tra sau:
if(count(array_intersect($haystack, $target)) > 0){
// at least one of $target is in $haystack
}
Là một nhà phát triển, bạn có thể nên bắt đầu học các hoạt động tập hợp (khác biệt, liên hiệp, giao điểm). Bạn có thể hình dung mảng của mình như một "bộ" và các khóa bạn đang tìm kiếm mảng còn lại.
function in_array_all($needles, $haystack) {
return empty(array_diff($needles, $haystack));
}
echo in_array_all( [3,2,5], [5,8,3,1,2] ); // true, all 3, 2, 5 present
echo in_array_all( [3,2,5,9], [5,8,3,1,2] ); // false, since 9 is not present
function in_array_any($needles, $haystack) {
return !empty(array_intersect($needles, $haystack));
}
echo in_array_any( [3,9], [5,8,3,1,2] ); // true, since 3 is present
echo in_array_any( [4,9], [5,8,3,1,2] ); // false, neither 4 nor 9 is present
Đi ra khỏi câu trả lời @Rok Kralj (IMO tốt nhất) để kiểm tra xem có bất kỳ kim nào tồn tại trong đống cỏ khô hay không, bạn có thể sử dụng (bool)
thay thế cho câu trả lời !!
này đôi khi có thể gây nhầm lẫn trong quá trình xem xét mã.
function in_array_any($needles, $haystack) {
return (bool)array_intersect($needles, $haystack);
}
echo in_array_any( array(3,9), array(5,8,3,1,2) ); // true, since 3 is present
echo in_array_any( array(4,9), array(5,8,3,1,2) ); // false, neither 4 nor 9 is present
Giải pháp của IMHO Mark Elliot là giải pháp tốt nhất cho vấn đề này. Nếu bạn cần thực hiện các thao tác so sánh phức tạp hơn giữa các phần tử mảng VÀ bạn đang sử dụng PHP 5.3, bạn cũng có thể nghĩ về điều gì đó như sau:
<?php
// First Array To Compare
$a1 = array('foo','bar','c');
// Target Array
$b1 = array('foo','bar');
// Evaluation Function - we pass guard and target array
$b=true;
$test = function($x) use (&$b, $b1) {
if (!in_array($x,$b1)) {
$b=false;
}
};
// Actual Test on array (can be repeated with others, but guard
// needs to be initialized again, due to by reference assignment above)
array_walk($a1, $test);
var_dump($b);
Điều này phụ thuộc vào việc đóng cửa; chức năng so sánh có thể trở nên mạnh mẽ hơn nhiều. Chúc may mắn!
if(empty(array_intersect([21,22,23,24], $check_with_this)) {
print "Not found even a single element";
} else {
print "Found an element";
}
array_intersect () trả về một mảng chứa tất cả các giá trị của array1 có trong tất cả các đối số. Lưu ý rằng các khóa được giữ nguyên.
Trả về một mảng chứa tất cả các giá trị trong mảng1 có giá trị tồn tại trong tất cả các tham số.
trống() - Xác định xem một biến có trống không
Trả về FALSE nếu var tồn tại và có giá trị khác rỗng, khác 0. Nếu không, trả về TRUE.