php memeriksa apakah array berisi semua nilai array dari array lain


110
$all = array
(
    0 => 307,
    1 => 157,
    2 => 234,
    3 => 200,
    4 => 322,
    5 => 324
);
$search_this = array
(
    0 => 200,
    1 => 234
);

Saya ingin mengetahui apakah $ all berisi semua $ search_this values ​​dan mengembalikan true atau false. ada ide, tolong?



@VishalKumarSahu Bukan duplikat: Tautan yang Anda berikan berkaitan dengan memeriksa apakah ada elemen yang terkandung dalam larik lain, bukan jika SEMUA elemen ada di larik lain.
Stefan

Jawaban:


159

Lihatlah array_intersect () .

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

11
Anda tahu Anda bisa menghilangkan kedua count()panggilan?
Wrikken

1
@Wrikken Tidak dapat mengatur ulang nilai selama array_intersect()? Maksud saya ['a', 'b'] != ['b', 'a'],.
sbichenko

4
Dan bahkan kemudian: perbandingan larik : " ==BENAR jika $ a dan $ b memiliki pasangan kunci / nilai yang sama." , jadi urutannya bahkan tidak penting (gunakan ===untuk itu)
Wrikken

2
Jawaban ini mengasumsikan bahwa $ all array hanya berisi nilai unik. Jika ini bukan masalahnya, seseorang dapat menggunakan fungsi array_unique pada $ all array dalam fungsi array_intersects.
Relequest

5
solusi array_diff @orrd memberi jauh lebih bersih
Joseph Connolly

223

Jawaban sebelumnya semuanya melakukan lebih banyak pekerjaan daripada yang mereka butuhkan. Cukup gunakan array_diff . Ini adalah cara termudah untuk melakukannya:

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

Hanya itu yang harus Anda lakukan.


4
Terima kasih untuk momen aha; Saya datang berpikir array_intersect.
Derek Illchuk

19
ini harus menjadi jawabannya
Matius

2
Ya, itu solusi yang lebih baik
Oleksandr Diudiun

1
Solusi yang lebih baik daripada berpotongan!
TheBosti

1
Saya menemukan halaman ini dan menggunakan solusi di atas karena memperhitungkan duplikat
Rayzor

9

Sedikit lebih pendek dengan 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

Bagaimana dengan ini:

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

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.