php dizinin başka bir diziden tüm dizi değerlerini içerip içermediğini kontrol edin


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

$ All'ın tüm $ search_this değerlerini içerip doğru mu yoksa yanlış mı döndürdüğünü öğrenmek istiyorum. herhangi bir fikir lütfen?



@VishalKumarSahu Tam bir kopya değil: Verdiğiniz bağlantınız, TÜM elemanların başka bir dizide yer alıp almadığını kontrol etmekle ilgilidir.
Stefan

Yanıtlar:


159

Array_intersect () öğesine bakın .

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

11
Her iki count()aramayı da ihmal edebileceğinizi biliyor musunuz ?
Wrikken

1
@Wrikken Değerler sıralanamaz array_intersect()mı? Yani ['a', 'b'] != ['b', 'a'],.
sbichenko

4
Ve o zaman bile: dizi karşılaştırması : " ==$ a ve $ b aynı anahtar / değer çiftlerine sahipse DOĞRU." , bu yüzden sıra önemli değil ( ===bunun için kullanın )
Wrikken

2
Bu yanıt, $ all dizisinin yalnızca benzersiz değerler içerdiğini varsayar. Eğer durum bu değilse, array_intersects işlevindeki $ all dizisinde array_unique işlevi kullanılabilir.
2013

5
array_diff çözümü @orrd çok daha temiz
Joseph Connolly

224

Önceki cevapların hepsi gerekenden daha fazla iş yapıyor. Sadece array_diff kullanın . Bunu yapmanın en basit yolu şudur:

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

Tüm yapman gereken bu.


4
Aha an için teşekkürler; Düşünmeye geldim array_intersect.
Derek Illchuk

19
cevap bu olmalı
Matthew

2
Evet, çok daha iyi bir çözüm
Oleksandr Diudiun

1
Kesişmekten daha iyi çözüm!
TheBosti

1
Bu sayfaya rastladım ve yukarıdaki çözümü kullandım çünkü kopyaları hesaba
katıyordu

9

Array_diff ile biraz daha kısa

$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

Buna ne dersin:

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

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.