php comprueba si la matriz contiene todos los valores de la matriz de otra matriz


110
$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 los valores de $ search_this y devolver verdadero o falso. alguna idea por favor?



@VishalKumarSahu No es 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 otra.
Stefan

Respuestas:


159

Mira array_intersect () .

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

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

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

4
E incluso entonces: comparación de matrices : " ==VERDADERO si $ ay $ b tienen los mismos pares clave / valor". , por lo que el orden ni siquiera importa ( ===
úselo

2
Esta respuesta asume que la matriz $ all solo contiene valores únicos. Si este no es el caso, se puede usar la función array_unique en la matriz $ all en la función array_intersects.
Relequestual

5
La solución array_diff que @orrd dio es mucho más limpia
Joseph Connolly

223

Todas las respuestas anteriores están haciendo más trabajo del necesario. Simplemente use array_diff . Esta es la forma más sencilla de hacerlo:

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

Eso es todo lo que tienes que hacer.


4
Gracias por el momento aha; Entré pensando array_intersect.
Derek Illchuk

19
esta debería ser la respuesta
Mateo

2
Sí, es una solución tan mejor
Oleksandr Diudiun

1
¡Mejor solución que intersecar!
TheBosti

1
Encontré esta página y utilicé la solución anterior porque tenía duplicados
Rayzor

9

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


0

Qué tal esto:

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

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.