Php проверяет, содержит ли массив все значения массива из другого массива

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

Я хотел бы узнать, содержит ли $all все значения $search_this и возвращает true или false. любая идея, пожалуйста?

Ответ 1

Посмотрите array_intersect().

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

Ответ 2

Предыдущие ответы все делают больше работы, чем нужно. Просто используйте array_diff. Это самый простой способ сделать это:

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

Это все, что вам нужно сделать.

Ответ 3

Немного короче 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

Ответ 4

Я думаю, что вы ищете функцию пересечения

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

array_intersect() возвращает массив, содержащий все значения array1, которые  присутствует во всех аргументах. Обратите внимание, что ключи сохраняются.

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

Ответ 5

Как насчет этого:

function array_keys_exist($searchForKeys = array(), $searchableArray) { $searchableArrayKeys = array_keys($searchableArray); return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); }