Jawaban:
Persimpangan target dengan tumpukan jerami dan pastikan persimpangan tepat sama dengan target:
$haystack = array(...);
$target = array('foo', 'bar');
if(count(array_intersect($haystack, $target)) == count($target)){
// all of $target is in $haystack
}
Perhatikan bahwa Anda hanya perlu memverifikasi bahwa ukuran perpotongan yang dihasilkan berukuran sama dengan larik nilai target untuk dikatakan $haystacksebagai superset $target.
Untuk memverifikasi bahwa setidaknya satu nilai $targetjuga masuk $haystack, Anda dapat melakukan pemeriksaan ini:
if(count(array_intersect($haystack, $target)) > 0){
// at least one of $target is in $haystack
}
Sebagai pengembang, Anda mungkin harus mulai mempelajari operasi set (perbedaan, gabungan, persimpangan). Anda dapat membayangkan array Anda sebagai satu "set", dan kunci yang Anda cari untuk yang lain.
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
Keluar dari jawaban @Rok Kralj (IMO terbaik) untuk memeriksa apakah ada jarum yang ada di tumpukan jerami, Anda dapat menggunakan (bool)alih-alih !!yang terkadang dapat membingungkan selama peninjauan kode.
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
Solusi IMHO Mark Elliot yang terbaik untuk masalah ini. Jika Anda perlu membuat operasi perbandingan yang lebih kompleks antara elemen array DAN Anda menggunakan PHP 5.3, Anda mungkin juga berpikir tentang sesuatu seperti berikut:
<?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);
Ini bergantung pada penutupan; fungsi perbandingan bisa menjadi jauh lebih kuat. Semoga berhasil!
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 () mengembalikan larik yang berisi semua nilai larik1 yang ada di semua argumen. Perhatikan bahwa kunci dipertahankan.
Mengembalikan larik yang berisi semua nilai dalam larik1 yang nilainya ada di semua parameter.
kosong () - Tentukan apakah suatu variabel kosong
Menampilkan FALSE jika var ada dan memiliki nilai bukan kosong, bukan nol. Jika tidak, mengembalikan TRUE.