Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/10/2014, 14:53
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Asociación bidireccional de string

Hola gente que tal?

Los consulto por un problema que tengo que no se me ocurre como resolver, tengo una posible solución pero que no me convence.

Lo que necesito es hacer una asociación bidireccional entre dos string, por ejemplo:

Dirección 1:
Humano -> Perro
Gato -> Raton
Vaca -> Queso

Direccion 2:
Perro -> Humano
Raton -> Gato
Queso -> Vaca

Lo que quiero hacer es una función que reciba la dirección y el valor de origen y devuelva el de destino, la posible solución que se me ocurrió es esta:
Código PHP:
Ver original
  1. <?php
  2. function bi_direccional($clave, $es_clave = true)
  3.     {
  4.         $asociaciones = [];
  5.         $asociaciones["humano"] = "perro";
  6.         $asociaciones["gato"] = "raton";
  7.         $asociaciones["vaca"] = "queso";
  8.        
  9.         if($es_clave)
  10.             return $asociaciones[$clave];
  11.         else
  12.             return array_search($clave, $asociaciones);
  13.     }

La cual funciona, pero el problema es que levanta a memoria todo el array, y este va a tener varios miles de elementos con lo cual el consumo de memoria va a ser grande.

Asi que pense otra solucion:
Código PHP:
Ver original
  1. function bi_direccional($clave, $es_clave = true)
  2.     {
  3.         if($es_clave)
  4.         {
  5.             switch($clave)
  6.             {
  7.                 case "humano" : $valor = "perro"; break;
  8.                 case "gato" : $valor = "raton"; break;
  9.                 case "vaca" : $valor = "queso"; break;        
  10.             }        
  11.         }
  12.         else
  13.         {
  14.             switch($clave)
  15.             {
  16.                 case "perro" : $valor = "humano"; break;
  17.                 case "raton" : $valor = "gato"; break;
  18.                 case "queso" : $valor = "vaca"; break;        
  19.             }
  20.         }
  21.         return $valor;
  22.     }

Pero que problema, esta no consume memoria pero tengo que escribir dos veces el switch y como son muchos valores tampoco me sirve.

Cabe destacar que todos estos valores los escribo a mano en script, son estáticos y no proceden de ninguna base de datos.

¿Se les ocurre alguna otra forma de solucionar el inconveniente?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 17/10/2014 a las 16:11