Validar si algún elemento de un Array existe en otro PHP

publicado por: Anonymous

en esta oportunidad tengo el siguiente problema.
Necesito poder validar si algún elemento del array1 se encuentra en el array2.

$perfil = array("300","100");
$perfil_permitidos = array("100","300", "400");

//Valido si algunos de los elemento del array perfil, se encuentre en algunos de los elementos del array $perfil_permitidos

if (in_array($perfil, $perfil_permitidos)) {
    //Si existe
    redirect(base_url()."bienvenidos");

} else {
    //No existe
    redirect(base_url()."error403");

}

Pero no me funciona, siempre me dice que no esta.

solución

El problema es que la función in_array() evalua si un elemento (valor) está dentro de un array.

Entonces para no modificar tanto su código, podría iterar los elementos del primer array y preguntar si existe el elemento iterado ($value) en el array2.

Además de tener una variable $existe, inicializada en false, que indique si existe o no algún elemento en el array, si existe cambiamos el valor de la variable $existe a true y salimos del ciclo con break.

Posteriormente, validamos la variable $existe para la redirección.

$perfil = array("300","100");
$perfil_permitidos = array("100","300", "400");
$existe= false;
foreach ($perfil as $value) {
    if (in_array($value, $perfil_permitidos)) {
       //
        $existe = true;
        break;
    } 
}
if($existe) redirect(base_url()."bienvenidos");
else redirect(base_url()."error403");

Si desea hacer uso de funciones existentes en PHP directamente, podría utilizar array_intersect como se explica en la respuesta de @anonimo , otra forma sería utilizar array_diff() esta función retornará los valores del primer array pasado por parámetro que no están en el segundo array pasado por parámetro. (pueden pasarse más arrays)

entonces preguntamos, si la cantidad count() de lo que retorna dicha función es igual al count de $perfil, entonces no existirá ningún elemento que se repita.

$perfil = array("300","100");
$perfil_permitidos = array("100","300", "400");
if(count(array_diff($perfil, $perfil_permitidos))!=count($perfil) ){
     //Si existe
     redirect(base_url()."bienvenidos");
}
else{
     //No existe
     redirect(base_url()."error403");
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *