Pense que te darias cuenta de tu error haciendo las pruebas. Pero bueno vamos a verlo de forma simple usando tus pruebas.
Dices que con una prueba como esta
array_intersect(['a','b',1,2],[1,2,3,4]), obtienes un array con los elemento correctos, y cuando pasa el if los pierdes obteniendo este resultado
['a','b',1,2,3,4]. Bien dejame decirte que eso no tiene nada de extraño, eso es lo que debe de pasar y es porque en tu ejemplo inicial y en tus pruebas estas perdiendo el array en la condición porque solo evaluas que te regrese un array y no lo estas asignando.
¿Donde esta el truco?
Sencillo, tu tienes de forma general esto:
Código PHP:
Ver original$data = ['a','b',1,2];
//aparente comportamiento extraño
}
Si ejecutas eso, en el print_r dentro del if obtienes todos los elementos, lo que es normal. Si quieres los elementos "filtrados" tienes que hacer lo siguiente
Código PHP:
Ver original//obtenemos lo que se requiere
} else {
echo "\nArray vacio";
}
Puedes probar esto aquí:
http://sandbox.onlinephpfunctions.co...6623711919bc3a
Con el ultimo fragmento de código, obtienes lo que esperas, en tu ejemplo inicial, ese es el problema; nunca filtras el arreglo con
array_intersect!!!
Esto debiera de solucionar el enigma: