2012-03-11 8 views
63
$all = array 
(
    0 => 307, 
    1 => 157, 
    2 => 234, 
    3 => 200, 
    4 => 322, 
    5 => 324 
); 
$search_this = array 
(
    0 => 200, 
    1 => 234 
); 

Me gustaría saber si $ all contiene todos $ search_this values ​​y devuelve true o false. alguna idea, por favor?php comprueba si el conjunto contiene todos los valores de matriz de otro array

+1

Posible duplicado de [Comprobación para ver si los elementos de un array están en otra matriz en PHP] (http://stackoverflow.com/questions/523796/checking-to -ver-si-uno-arreglos-elementos-están-en-otro-matriz-en-php) –

+0

@VishalKumarSahu No es exactamente un duplicado: su enlace dado tiene que ver con verificar si CUALQUIER elemento está contenido en otra matriz, no si TODOS los elementos están contenidos en otro. – Stefan

Respuesta

118

Mira array_intersect().

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

¿Sabes que puedes omitir ambas llamadas 'count()'? – Wrikken

+0

@Wrikken ¿No se pueden reordenar los valores durante 'array_intersect()'? Quiero decir, '['a', 'b']! = ['B', 'a']'. – sbichenko

+1

@exizt: 'array_intersect()' no altera las matrices de entrada, por lo que '$ search_this' &' $ all' son seguras (solo devuelve una salida). La firma de la función es 'array array_intersect (array $ array1, array $ array2 [, array $ ...])' (seguro). Si pudiera/pudiera alterarlos, sería 'array array_intersect (array & $ array1, array & $ array2 [, array & $ ...])' (posible alteración de los argumentos de entrada). Además, las claves de '$ search_this' son _preserve_, y se guarda el orden de la primera matriz. Entonces, ambos pares clave/valor, como su orden, coinciden. – Wrikken

2

creo que usted está buscando para la función se cruzan

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

array_intersect() devuelve una matriz que contiene todos los valores de matriz1 que son presentes en todos los argumentos. Tenga en cuenta que las claves se conservan.

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

+0

gracias, funciona! :) – peter

6

Un poco más 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 
113

Las respuestas anteriores están haciendo más trabajo de lo que necesitan. Simplemente use array_diff. Esta es la forma más sencilla de hacerlo:

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

Eso es todo lo que tiene que hacer.

+3

Gracias por el momento aha; Entré pensando 'array_intersect'. –

+6

esta debería ser la respuesta – Matthew

+1

Sí, es una solución tan buena – noonehos

0

¿Qué tal esto:

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

Cuestiones relacionadas