2012-03-11 1 views
63
$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. любая идея, пожалуйста?php проверяет, содержит ли массив все значения массива из другого массива

+1

Возможный дубликат [Проверка, чтобы увидеть, если элементы одного массива находятся в другой массив в PHP] (http://stackoverflow.com/questions/523796/checking-to -see-if-one-arrays-elements-are-in-another-array-in-php) –

+0

@VishalKumarSahu Не совсем дубликат: данная ссылка связана с проверкой того, содержатся ли какие-либо элементы в другом массиве, а не если ВСЕ элементы содержатся в другом. – Stefan

ответ

118

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

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

Вы знаете, что вы можете опускать оба 'count()' звонка? – Wrikken

+0

@Wrikken Не удается ли изменить значения во время 'array_intersect()'? Я имею в виду '['a', 'b']! = ['B', 'a']'. – sbichenko

+1

@exizt: 'array_intersect()' не изменяет входные массивы, поэтому '$ search_this' и' $ all' безопасны (он просто возвращает результат). Подписи функции: 'array array_intersect (array $ array1, array $ array2 [, array $ ...])' (safe). Если это будет/может их изменить, это будет 'array array_intersect (array & $ array1, array & $ array2 [, array & $ ...])' (возможное изменение входных аргументов). Кроме того, ключи '$ search_this' являются _preserve_, и порядок первого массива сохраняется. Таким образом, оба пары ключ/значение, как их порядок, совпадают. – Wrikken

2

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

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

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

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

+0

Спасибо, это работает! :) – peter

6

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

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

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

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

+3

Спасибо за момент ахи; Я придумал 'array_intersect'. –

+6

Это должен быть ответ – Matthew

+1

Да, это такое лучшее решение. – noonehos

0

Как об этом:

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

Смежные вопросы