Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Evitar que deje de mostrar con intersect

Estas en el tema de Evitar que deje de mostrar con intersect en el foro de PHP en Foros del Web. Buenas, tengo unas funciones que le paso unos parámetros y para comparar 2 arrays utilizo array_intersect. Funciona correctamente hasta el momento que el array_intersect no ...
  #1 (permalink)  
Antiguo 13/05/2014, 03:59
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 1 mes
Puntos: 2
Evitar que deje de mostrar con intersect

Buenas,

tengo unas funciones que le paso unos parámetros y para comparar 2 arrays utilizo array_intersect.

Funciona correctamente hasta el momento que el array_intersect no tiene una coincidencia entre los dos arrays.... en ese momento no muestra nada de lo que viene detrás.

Me gustaría que todavía que el array_intersect este vacío el código que viene detrás lo siga mostrando.
  #2 (permalink)  
Antiguo 14/05/2014, 02:44
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Evitar que deje de mostrar con intersect

Código PHP:
        function getComparar($slug$slug2){
                
$result array_intersect($this->getLugar($slug), $this->getBares($slug2));
               
                
$result implode(","$result);
     
                return 
$result;
        } 
  #3 (permalink)  
Antiguo 14/05/2014, 04:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Evitar que deje de mostrar con intersect

Cita:
Funciona correctamente hasta el momento que el array_intersect no tiene una coincidencia entre los dos arrays.... en ese momento no muestra nada de lo que viene detrás.
Según la descripción del manual de referencia (ver link), ese es el comportamiento, normal, correcto y esperado para array_intersect. No te olvides que en conjuntos, "intersección" es el subconjunto de elementos comunes a dos conjuntos. Si no está en ambos no debe salir.
Me da la impresión de que lo que buscas es un comportamiento que debes conseguir por medio de un proceso que debes crear, y no por el uso de una función base como esa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 16/05/2014, 05:01
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Evitar que deje de mostrar con intersect

Y entonces como podría hacer para que siguiera mostrando?
  #5 (permalink)  
Antiguo 16/05/2014, 06:29
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Evitar que deje de mostrar con intersect

Por que no lees como te han dicho sobre Teoria de Conjuntos ?
__________________
Salu2!
  #6 (permalink)  
Antiguo 16/05/2014, 06:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Evitar que deje de mostrar con intersect

Cita:
Iniciado por manelmanel8 Ver Mensaje
Y entonces como podría hacer para que siguiera mostrando?
¿Cómo tendrías que hacer?
Como dije: creando una funcion en tu script que sea campaz de hacerlo
Lo único que debes hacer es razonarlo: Si quieres que te devuelva los elementos comunes entre dos arrays, y además todos los comunes que siguen a un elemento dado del conjunto de comunes, pues debes crear una función donde envíes dos arrays y te devuelva uno.
La lógica interna será crear un array donde se pongan todos los comunes, mas los siguientes al que quieres.
Creo que si lo piensas, debes tener capacidad para escribir tu mismo un código de ese tipo, ¿no?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 16/05/2014, 07:37
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Evitar que deje de mostrar con intersect

Si todo lo que quieres es que si no hay nada en la interseccion de Lugares con Bares que te devuelva "algo" para mostrarle al usuario, no la compliques no hay que cambiar nada en tu clase, ni agregar metodos:

Código PHP:
Ver original
  1. $res = $objeto->getComparar($bares, $lugares);
  2. if (is_empty($res))
  3.    $res = implode(",", $bares);

Ahora, esa clase esta bastante mal-hecha:


- No hay auto-documentacion (@param, @return, etc)

- El proposito del metodo es ? comparar ? => no veo comparacion alguna! y si lo hay es "implicito", en cualquier caso una funcion que compare deberia implementar un tipo de interfaz IComparable devolviendo -1,0,+1 segun el caso o en el peor de los casos un boolean
__________________
Salu2!

Última edición por Italico76; 16/05/2014 a las 08:04
  #8 (permalink)  
Antiguo 16/05/2014, 08:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Evitar que deje de mostrar con intersect

Volviendo al prncipio:
Cita:
Iniciado por manelmanel8 Ver Mensaje

Funciona correctamente hasta el momento que el array_intersect no tiene una coincidencia entre los dos arrays.... en ese momento no muestra nada de lo que viene detrás.

Me gustaría que todavía que el array_intersect este vacío el código que viene detrás lo siga mostrando.
¿Qué es lo que se supone que "viene detrás"?
Porque detrás de lo que coincide... no hay nada.

Podrías darnos un ejemplo de datos a los que te referes por "detrás"?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:55.