php controlla se array contiene tutti i valori di array da un altro array


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

Vorrei scoprire se $ all contiene tutti i valori $ search_this e restituisce true o false. qualche idea per favore?



@VishalKumarSahu Non proprio un duplicato: il collegamento fornito ha a che fare con il controllo se QUALSIASI elemento è contenuto in un altro array, non se TUTTI gli elementi sono contenuti in un altro.
Stefan il

Risposte:


159

Guarda array_intersect () .

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

11
Sai che puoi omettere entrambe le count()chiamate?
Wrikken

1
@Wrikken Non è possibile riordinare i valori durante array_intersect()? Voglio dire, ['a', 'b'] != ['b', 'a'].
sbichenko

4
E anche allora: confronto tra array : " ==TRUE se $ a e $ b hanno le stesse coppie chiave / valore." , quindi l'ordine non ha importanza (utilizzare ===per quello)
Wrikken

2
Questa risposta presuppone che l'array $ all contenga solo valori univoci. Se questo non è il caso, si può usare la funzione array_unique sull'array $ all nella funzione array_intersects.
Relequestual

5
La soluzione array_diff che @orrd ha dato è molto più pulita
Joseph Connolly

223

Le risposte precedenti stanno tutte facendo più lavoro del necessario. Usa semplicemente array_diff . Questo è il modo più semplice per farlo:

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

È tutto quello che devi fare.


4
Grazie per il momento aha; Sono venuto a pensare array_intersect.
Derek Illchuk

19
questa dovrebbe essere la risposta
Matteo

2
Sì, è una soluzione così migliore
Oleksandr Diudiun

1
Soluzione migliore che intersecare!
TheBosti

1
Mi sono imbattuto in questa pagina e ho usato la soluzione di cui sopra perché rappresentava i duplicati
Rayzor

9

Un po 'più corto con 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

Cosa ne pensi di questo:

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

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.