PHP überprüfen, ob Array alle Array-Werte von einem anderen Array enthält

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

Ich möchte herausfinden, ob $ all alle $ search_this-Werte enthält und true oder false zurückgeben. Irgendeine Idee bitte?

Peter
quelle
@VishalKumarSahu Nicht ganz ein Duplikat: Ihr angegebener Link hat mit der Überprüfung zu tun, ob ALLE Elemente in einem anderen Array enthalten sind, nicht, ob ALLE Elemente in einem anderen enthalten sind.
Stefan

Antworten:

158

Schauen Sie sich array_intersect () an .

$containsSearch = count(array_intersect($search_this, $all)) == count($search_this);
jasonbar
quelle
11
Sie wissen, dass Sie beide count()Anrufe weglassen können ?
Wrikken
1
@Wrikken Können die Werte während nicht neu angeordnet werden array_intersect()? Ich meine , ['a', 'b'] != ['b', 'a'].
Sbichenko
4
Und selbst dann: Array-Vergleich : " ==WAHR, wenn $ a und $ b die gleichen Schlüssel / Wert-Paare haben." , also spielt die Reihenfolge keine Rolle (verwenden Sie ===dafür)
Wrikken
2
Diese Antwort setzt voraus, dass das Array $ all nur eindeutige Werte enthält. Ist dies nicht der Fall, kann die Funktion array_unique für das Array $ all in der Funktion array_intersects verwendet werden.
Relequestual
5
array_diff Lösung @orrd gab ist viel sauberer
Joseph Connolly
222

Die vorherigen Antworten machen alle mehr Arbeit als nötig. Verwenden Sie einfach array_diff . Dies ist der einfachste Weg, dies zu tun:

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

Das ist alles was du tun musst.

orrd
quelle
4
Danke für den Aha-Moment; Ich kam zum Nachdenken array_intersect.
Derek Illchuk
19
Dies sollte die Antwort sein
Matthew
2
Ja, es ist so eine bessere Lösung
Oleksandr Diudiun
1
Bessere Lösung als überschneiden!
TheBosti
1
Ich bin auf diese Seite
gestoßen
9

Mit array_diff etwas kürzer

$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
javigzz
quelle
3

Ich denke, Sie suchen nach der Schnittfunktion

array array_intersect ( array $array1 , array $array2 [, array $ ... ] )

array_intersect()Gibt ein Array zurück, das alle Werte von array1 enthält, die in allen Argumenten vorhanden sind. Beachten Sie, dass die Schlüssel erhalten bleiben.

http://www.php.net/manual/en/function.array-intersect.php

James Kyburz
quelle
0

Wie wäre es damit:

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

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
K-Alex
quelle