Ver Mensaje Individual
  #10 (permalink)  
Antiguo 31/10/2018, 09:17
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: array_intersect() no funciona en un if

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
  1. $data = ['a','b',1,2];
  2.  
  3. print_r(array_intersect($data,[1,2,3,4]));
  4.  
  5. //aparente comportamiento extraño
  6. if (array_intersect($data,[1,2,3,4])) {
  7.     print_r($data);
  8. }
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
  1. print_r(array_intersect($data,[1,2,3,4]));
  2. //obtenemos lo que se requiere
  3. if ($data = array_intersect($data,[1,2,3,4])) {
  4.     print_r($data);
  5. } else {
  6.     echo "\nArray vacio";
  7. }
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:
Código PHP:
Ver original
  1. <?php if ($value = array_intersect(array_keys($value),['id_socio','nombre','apellidos','edad'])): ?>
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Última edición por hhs; 31/10/2018 a las 12:02