Hola, @pateketrueke, intentare responder todas tus preguntas:
Cita: Caray, usa un array y ya, ¿para qué te complicas?
No me agrada la idea de levantar a memoria miles de elementos si solo voy a usar 5, es matar moscas a cañonazos.
Cita: ¿Qué es más molesto para ti?
a) Miles de elementos en un array, que según tu "consume más memoria" y es cierto, pero no por eso es malo.
b) Miles de condiciones lógicas, escrita una a una, realmente malo a mi parecer.
Lo mas molesto para mi es consumir muchos mas recursos de los que necesito. Si, es mas cómodo un array. Si es mas tedioso condicionales anidados. Pero la opcion tediosa consume menos recursos.
Cita: Ahora piensa, si tuvieras los datos en algún lado, ¿sería mejor?
Si los tuviera en "algún lado" que supongo de refieres a una BD, no me estaría planteando este problema, se los pediría a la base de datos y listo.
Cita: ¿Por qué necesitas meterlos a mano?
Son constantes de configuración y mapeos, son propios de cada sistema por lo que no hay mucha reusabilidad, mi prioridad es que consuma pocos recursos y que funcione rápido, puedo prescindir de claridad siempre y cuando no se vuelva inmantenible, como pasaría en el caso de tener dos switch enormes con los mismos datos.
Porque es algo que necesito que este dentro de php, no me aporta ninguna ventaja meterlos en una base de datos aparte de comodidad. Dicho de otra forma, no tengo ningún problema que no pueda solucionar sin una base de datos, así que no la necesito.
Si lo guardo en json es lo mismo que guardarlo en un array, tendré que levantarlo todo y tendre un array o un objeto enorme en memoria del cual solo usare un par de propiedades.
Cita: Piensa de nuevo las cosas: los arrays están perfectamente diseñados para acceder mediante su índice, o bien, la optimización de array_search() es buena.
En comparación, miles de condiciones una tras otra no sufren ningún tipo de optimización, son tan salvajes como escribir en ensamblador.
El ensamblador es sumamente rápido y eficiente, de hecho, es lo mas rápido y eficiente después del binario.
Te equivocas con lo de que no hay ninguna optimizacion, una estructura switch es optimizada internamente con algoritmos de busqueda, similares a los que se usan en array_search (si es que no son los mismos).
Cita: ¿Y si usas alguna clase de SPL que esté mejor optimizada para arrays?
Quisiera evitar el uso de arrays, con o sin SPL, no obstante las clases que encontre agregan funcionalidades que no me sirven para este problema.
Cita: No sé, no entiendo por qué ahogarse en un vaso de agua.
Solo busco la forma mas eficiente de solucionar un problema, no la mas cómoda.
Si lo necesitara ya, implementaría arrays ya que no conozco aun otra solucion alternativa, pero como puedo esperar abri este tema a ver si alguien se le ocurre otra variante.
Gracias por el interes.
Edito:
Se me ocurre esta tercer solución:
Código PHP:
Ver original<?php
function bi_direccional($clave, $es_clave = true)
{
switch($clave)
{
case "humano" :
case "perro" :
$valor = ($es_clave ? "perro" : "humano");
break;
case "gato" :
case "raton" :
$valor = ($es_clave ? "raton" : "gato");
break;
case "vaca" :
case "queso" :
$valor = ($es_clave ? "queso" : "vaca");
break;
}
return $valor;
}
Es mucho mejor la que segunda ya que hay un solo switch pero igual sigue siendo compleja.