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?



@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);

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.


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


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); 
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.