Inicio ¿Sidebar? RSS @MisAlgoritmos at Twitter

Generando IFs con PHP // Lo mas loco que se me ha ocurrido @_@

De verdad que nunca creí llegar a tanto, pero la necesidad de verdad me hizo enloquecer. Aclaro que esto es también para presumir y por favor dejen críticas constructivas, no hago diagramas de flujo a nadie :D (vale la pena seguir leyendo léanlo si quieren o al menos pasen a compadecer mi status de locura momentaneo en los comments :P )

Lo que busco con todo esto que les mostraré, es crear una lista de IF's en la que sólo verifico que cierta variable exista y además contenga algún valor tratando de evitar Warnings al usar variables no declaradas aún, y de ahí un 2do paso que no les mostraré en el cual dentro de un procedimiento genero chorrocientas mil combinaciones de INNER JOIN's y WHERE's en consultas SQL. :S

Si tuviéramos una aplicación en PHP en la que hacemos listado de registros, y en la que intentamos filtrar a su ves por alguna serie de parámetros que le enviemos (por ejemplo en el caso de wordpress el usa algo como isCategory(), isDate(), isPost(), isSearch o cosas así)... Si tuviéramos por ejemplo (como en mi caso algo así):

  1. isSearch()
  2. isType()
  3. isCategory()
  4. isDate()
  5. isOption1()
  6. isOption2()
  7. isOptionEtc()

Tendríamos que hacer tantas validaciones como funciones tenemos, menos 1: (2^7)=128 ¡¡¡128 combinaciones O_O!!! ¿Y si el cliente cambia de opinión y ahora quita o agrega una posibilidad? neeel... Ni loco escribo eso a pata!! safo! :P ... Y sin intensión de asustar a alguien, si así como están las cosas a alguien se le ocurre agregar tan solo una opción, como resultado esta cantidad crecería exponencialmente ufffff!!!

Algo así como esto en términos humanos es lo que necesito hacer:

Sea isSearch() = TRUE y todas las demas FALSE.
Sea isType() = TRUE y todas las demas FALSE.
Sea isCategory() = TRUE y todas las demas FALSE.
...
Sea isOptionEtc() = TRUE y todas las demas FALSE.
...

Y todas las demas combinaciones que pueda hacerse entre ellas, pero si no queda claro, visto de otra forma, siempre hago algo así antes de generar esa lista de combinaciones:

#isSearch()isType()isCategory()isDate()isOption1()isOption2()isOptionEtc()
1FALSEFALSEFALSEFALSEFALSEFALSEFALSE
2FALSEFALSEFALSEFALSEFALSEFALSETRUE
3FALSEFALSEFALSEFALSEFALSETRUEFALSE
4FALSEFALSEFALSEFALSEFALSETRUETRUE
5FALSEFALSEFALSEFALSETRUEFALSEFALSE
6FALSEFALSEFALSEFALSETRUEFALSETRUE
7FALSEFALSEFALSEFALSETRUETRUEFALSE
8FALSEFALSEFALSEFALSETRUETRUETRUE
9FALSEFALSEFALSETRUEFALSEFALSEFALSE
10FALSEFALSEFALSETRUEFALSEFALSETRUE
11FALSEFALSEFALSETRUEFALSETRUEFALSE
12FALSEFALSEFALSETRUEFALSETRUETRUE
13FALSEFALSEFALSETRUETRUEFALSEFALSE
14FALSEFALSEFALSETRUETRUEFALSETRUE
muchas muchas combinaciones mas... =S
125TRUETRUETRUETRUETRUEFALSEFALSE
126TRUETRUETRUETRUETRUEFALSETRUE
127TRUETRUETRUETRUETRUETRUEFALSE
128TRUETRUETRUETRUETRUETRUETRUE

y bueno uff, ahora imaginar la cantidad de IF's que tengo que escribir para validar eso aún mas increíble, por lo que inventé esta plasta de código :p a la que solo hay que pasarle un arreglo con los datos que hay que validar.

  1. <?
  2.    /*
  3.    * Define una secuencia de IFs para crear los filtros.
  4.    */
  5.    function setFiltros($filtros = array()){
  6.       if(!is_Array($filtros) OR count($filtros)==0){
  7.          return false;
  8.       }
  9.  
  10.       $ifs = pow(2,count($filtros))-1;
  11.  
  12.       ob_start();
  13.      
  14.       for($val=1;$val< =$ifs;$val++){
  15.          $bin = sprintf("%0".strlen(decbin($ifs))."s",decbin($val));
  16.          echo "/*$bin (".strlen(decbin($ifs)).")*/n";
  17.          if($val>1){
  18.             echo "elseif(";
  19.          }else{
  20.             echo "if(";
  21.          }
  22.          foreach($filtros as $_v=>$_k){
  23.             echo ($bin[$_v]?"$$_k=":'!')."is('$_k')";
  24.             if($_v!=count($filtros)-1){
  25.                echo " AND ";
  26.             }
  27.          }
  28.          echo ")";
  29.          echo "{nt";
  30.          echo "$this->setFiltro(array(";
  31.          $aux = '';
  32.          foreach($filtros as $_v=>$_k){
  33.             if($bin[$_v]){
  34.                $aux .= "'$_k'=>$$_k, ";
  35.             }
  36.          }
  37.          echo substr($aux,0,strlen($aux)-2);
  38.          echo "));n";
  39.          echo "}";
  40.       }
  41.      
  42.       eval($out = ob_get_clean());
  43.    }
  44. ?>

Esta función no retorna nada. La última línea de la función eval($out = ob_get_clean()) ejecuta todo lo que se generó y lo ejecuta como si fuera código PHP.

Para hacerla funcionar, sólo hay que pasarle como parámetro un arreglo con las distintas opciones que cuento. Por ejemplo:

  1. setFiltros(array('Search','Type','Category','Date','Option1','Option2','OptionEtc'));

O el mismo código visto de otra forma mas fácilmente entendible:

  1. $filtros = array();
  2. $filtros[] = 'Search';
  3. $filtros[] = 'Type';
  4. $filtros[] = 'Category';
  5. $filtros[] = 'Date';
  6. $filtros[] = 'Option1';
  7. $filtros[] = 'Option2';
  8. $filtros[] = 'OptionEtc';
  9.  
  10. setFiltros($filtros);

Y lo que da como salida es una secuencia de IFs que valida la entrada de datos (Esta es la parte que la función ejecuta como código PHP):

  1. /*0000001 (7)*/
  2. if(!is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  3.    $this->setFiltro(array('OptionEtc'=>$OptionEtc));
  4. }/*0000010 (7)*/
  5. elseif(!is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  6.    $this->setFiltro(array('Option2'=>$Option2));
  7. }/*0000011 (7)*/
  8. elseif(!is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  9.    $this->setFiltro(array('Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  10. }/*0000100 (7)*/
  11. elseif(!is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  12.    $this->setFiltro(array('Option1'=>$Option1));
  13. }/*0000101 (7)*/
  14. elseif(!is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  15.    $this->setFiltro(array('Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  16. }/*0000110 (7)*/
  17. elseif(!is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  18.    $this->setFiltro(array('Option1'=>$Option1, 'Option2'=>$Option2));
  19. }/*0000111 (7)*/
  20. elseif(!is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  21.    $this->setFiltro(array('Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  22. }/*0001000 (7)*/
  23. elseif(!is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  24.    $this->setFiltro(array('Date'=>$Date));
  25. }/*0001001 (7)*/
  26. elseif(!is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  27.    $this->setFiltro(array('Date'=>$Date, 'OptionEtc'=>$OptionEtc));
  28. }/*0001010 (7)*/
  29. elseif(!is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  30.    $this->setFiltro(array('Date'=>$Date, 'Option2'=>$Option2));
  31. }/*0001011 (7)*/
  32. elseif(!is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  33.    $this->setFiltro(array('Date'=>$Date, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  34. }/*0001100 (7)*/
  35. elseif(!is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  36.    $this->setFiltro(array('Date'=>$Date, 'Option1'=>$Option1));
  37. }/*0001101 (7)*/
  38. elseif(!is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  39.    $this->setFiltro(array('Date'=>$Date, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  40. }/*0001110 (7)*/
  41. elseif(!is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  42.    $this->setFiltro(array('Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2));
  43. }/*0001111 (7)*/
  44. elseif(!is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  45.    $this->setFiltro(array('Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  46. }/*0010000 (7)*/
  47. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  48.    $this->setFiltro(array('Category'=>$Category));
  49. }/*0010001 (7)*/
  50. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  51.    $this->setFiltro(array('Category'=>$Category, 'OptionEtc'=>$OptionEtc));
  52. }/*0010010 (7)*/
  53. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  54.    $this->setFiltro(array('Category'=>$Category, 'Option2'=>$Option2));
  55. }/*0010011 (7)*/
  56. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  57.    $this->setFiltro(array('Category'=>$Category, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  58. }/*0010100 (7)*/
  59. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  60.    $this->setFiltro(array('Category'=>$Category, 'Option1'=>$Option1));
  61. }/*0010101 (7)*/
  62. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  63.    $this->setFiltro(array('Category'=>$Category, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  64. }/*0010110 (7)*/
  65. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  66.    $this->setFiltro(array('Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2));
  67. }/*0010111 (7)*/
  68. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  69.    $this->setFiltro(array('Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  70. }/*0011000 (7)*/
  71. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  72.    $this->setFiltro(array('Category'=>$Category, 'Date'=>$Date));
  73. }/*0011001 (7)*/
  74. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  75.    $this->setFiltro(array('Category'=>$Category, 'Date'=>$Date, 'OptionEtc'=>$OptionEtc));
  76. }/*0011010 (7)*/
  77. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  78.    $this->setFiltro(array('Category'=>$Category, 'Date'=>$Date, 'Option2'=>$Option2));
  79. }/*0011011 (7)*/
  80. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  81.    $this->setFiltro(array('Category'=>$Category, 'Date'=>$Date, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  82. }/*0011100 (7)*/
  83. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  84.    $this->setFiltro(array('Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1));
  85. }/*0011101 (7)*/
  86. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  87.    $this->setFiltro(array('Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  88. }/*0011110 (7)*/
  89. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  90.    $this->setFiltro(array('Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2));
  91. }/*0011111 (7)*/
  92. elseif(!is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  93.    $this->setFiltro(array('Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  94. }/*0100000 (7)*/
  95. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  96.    $this->setFiltro(array('Type'=>$Type));
  97. }/*0100001 (7)*/
  98. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  99.    $this->setFiltro(array('Type'=>$Type, 'OptionEtc'=>$OptionEtc));
  100. }/*0100010 (7)*/
  101. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  102.    $this->setFiltro(array('Type'=>$Type, 'Option2'=>$Option2));
  103. }/*0100011 (7)*/
  104. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  105.    $this->setFiltro(array('Type'=>$Type, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  106. }/*0100100 (7)*/
  107. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  108.    $this->setFiltro(array('Type'=>$Type, 'Option1'=>$Option1));
  109. }/*0100101 (7)*/
  110. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  111.    $this->setFiltro(array('Type'=>$Type, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  112. }/*0100110 (7)*/
  113. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  114.    $this->setFiltro(array('Type'=>$Type, 'Option1'=>$Option1, 'Option2'=>$Option2));
  115. }/*0100111 (7)*/
  116. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  117.    $this->setFiltro(array('Type'=>$Type, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  118. }/*0101000 (7)*/
  119. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  120.    $this->setFiltro(array('Type'=>$Type, 'Date'=>$Date));
  121. }/*0101001 (7)*/
  122. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  123.    $this->setFiltro(array('Type'=>$Type, 'Date'=>$Date, 'OptionEtc'=>$OptionEtc));
  124. }/*0101010 (7)*/
  125. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  126.    $this->setFiltro(array('Type'=>$Type, 'Date'=>$Date, 'Option2'=>$Option2));
  127. }/*0101011 (7)*/
  128. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  129.    $this->setFiltro(array('Type'=>$Type, 'Date'=>$Date, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  130. }/*0101100 (7)*/
  131. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  132.    $this->setFiltro(array('Type'=>$Type, 'Date'=>$Date, 'Option1'=>$Option1));
  133. }/*0101101 (7)*/
  134. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  135.    $this->setFiltro(array('Type'=>$Type, 'Date'=>$Date, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  136. }/*0101110 (7)*/
  137. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  138.    $this->setFiltro(array('Type'=>$Type, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2));
  139. }/*0101111 (7)*/
  140. elseif(!is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  141.    $this->setFiltro(array('Type'=>$Type, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  142. }/*0110000 (7)*/
  143. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  144.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category));
  145. }/*0110001 (7)*/
  146. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  147.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'OptionEtc'=>$OptionEtc));
  148. }/*0110010 (7)*/
  149. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  150.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Option2'=>$Option2));
  151. }/*0110011 (7)*/
  152. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  153.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  154. }/*0110100 (7)*/
  155. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  156.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Option1'=>$Option1));
  157. }/*0110101 (7)*/
  158. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  159.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  160. }/*0110110 (7)*/
  161. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  162.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2));
  163. }/*0110111 (7)*/
  164. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  165.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  166. }/*0111000 (7)*/
  167. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  168.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date));
  169. }/*0111001 (7)*/
  170. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  171.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'OptionEtc'=>$OptionEtc));
  172. }/*0111010 (7)*/
  173. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  174.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option2'=>$Option2));
  175. }/*0111011 (7)*/
  176. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  177.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  178. }/*0111100 (7)*/
  179. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  180.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1));
  181. }/*0111101 (7)*/
  182. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  183.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  184. }/*0111110 (7)*/
  185. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  186.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2));
  187. }/*0111111 (7)*/
  188. elseif(!is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  189.    $this->setFiltro(array('Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  190. }/*1000000 (7)*/
  191. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  192.    $this->setFiltro(array('Search'=>$Search));
  193. }/*1000001 (7)*/
  194. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  195.    $this->setFiltro(array('Search'=>$Search, 'OptionEtc'=>$OptionEtc));
  196. }/*1000010 (7)*/
  197. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  198.    $this->setFiltro(array('Search'=>$Search, 'Option2'=>$Option2));
  199. }/*1000011 (7)*/
  200. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  201.    $this->setFiltro(array('Search'=>$Search, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  202. }/*1000100 (7)*/
  203. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  204.    $this->setFiltro(array('Search'=>$Search, 'Option1'=>$Option1));
  205. }/*1000101 (7)*/
  206. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  207.    $this->setFiltro(array('Search'=>$Search, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  208. }/*1000110 (7)*/
  209. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  210.    $this->setFiltro(array('Search'=>$Search, 'Option1'=>$Option1, 'Option2'=>$Option2));
  211. }/*1000111 (7)*/
  212. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  213.    $this->setFiltro(array('Search'=>$Search, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  214. }/*1001000 (7)*/
  215. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  216.    $this->setFiltro(array('Search'=>$Search, 'Date'=>$Date));
  217. }/*1001001 (7)*/
  218. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  219.    $this->setFiltro(array('Search'=>$Search, 'Date'=>$Date, 'OptionEtc'=>$OptionEtc));
  220. }/*1001010 (7)*/
  221. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  222.    $this->setFiltro(array('Search'=>$Search, 'Date'=>$Date, 'Option2'=>$Option2));
  223. }/*1001011 (7)*/
  224. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  225.    $this->setFiltro(array('Search'=>$Search, 'Date'=>$Date, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  226. }/*1001100 (7)*/
  227. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  228.    $this->setFiltro(array('Search'=>$Search, 'Date'=>$Date, 'Option1'=>$Option1));
  229. }/*1001101 (7)*/
  230. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  231.    $this->setFiltro(array('Search'=>$Search, 'Date'=>$Date, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  232. }/*1001110 (7)*/
  233. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  234.    $this->setFiltro(array('Search'=>$Search, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2));
  235. }/*1001111 (7)*/
  236. elseif($Search=is('Search') AND !is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  237.    $this->setFiltro(array('Search'=>$Search, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  238. }/*1010000 (7)*/
  239. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  240.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category));
  241. }/*1010001 (7)*/
  242. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  243.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'OptionEtc'=>$OptionEtc));
  244. }/*1010010 (7)*/
  245. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  246.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Option2'=>$Option2));
  247. }/*1010011 (7)*/
  248. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  249.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  250. }/*1010100 (7)*/
  251. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  252.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Option1'=>$Option1));
  253. }/*1010101 (7)*/
  254. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  255.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  256. }/*1010110 (7)*/
  257. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  258.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2));
  259. }/*1010111 (7)*/
  260. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  261.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  262. }/*1011000 (7)*/
  263. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  264.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Date'=>$Date));
  265. }/*1011001 (7)*/
  266. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  267.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Date'=>$Date, 'OptionEtc'=>$OptionEtc));
  268. }/*1011010 (7)*/
  269. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  270.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Date'=>$Date, 'Option2'=>$Option2));
  271. }/*1011011 (7)*/
  272. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  273.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Date'=>$Date, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  274. }/*1011100 (7)*/
  275. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  276.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1));
  277. }/*1011101 (7)*/
  278. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  279.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  280. }/*1011110 (7)*/
  281. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  282.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2));
  283. }/*1011111 (7)*/
  284. elseif($Search=is('Search') AND !is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  285.    $this->setFiltro(array('Search'=>$Search, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  286. }/*1100000 (7)*/
  287. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  288.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type));
  289. }/*1100001 (7)*/
  290. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  291.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'OptionEtc'=>$OptionEtc));
  292. }/*1100010 (7)*/
  293. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  294.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Option2'=>$Option2));
  295. }/*1100011 (7)*/
  296. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  297.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  298. }/*1100100 (7)*/
  299. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  300.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Option1'=>$Option1));
  301. }/*1100101 (7)*/
  302. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  303.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  304. }/*1100110 (7)*/
  305. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  306.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Option1'=>$Option1, 'Option2'=>$Option2));
  307. }/*1100111 (7)*/
  308. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  309.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  310. }/*1101000 (7)*/
  311. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  312.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Date'=>$Date));
  313. }/*1101001 (7)*/
  314. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  315.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Date'=>$Date, 'OptionEtc'=>$OptionEtc));
  316. }/*1101010 (7)*/
  317. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  318.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Date'=>$Date, 'Option2'=>$Option2));
  319. }/*1101011 (7)*/
  320. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  321.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Date'=>$Date, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  322. }/*1101100 (7)*/
  323. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  324.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Date'=>$Date, 'Option1'=>$Option1));
  325. }/*1101101 (7)*/
  326. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  327.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Date'=>$Date, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  328. }/*1101110 (7)*/
  329. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  330.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2));
  331. }/*1101111 (7)*/
  332. elseif($Search=is('Search') AND $Type=is('Type') AND !is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  333.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  334. }/*1110000 (7)*/
  335. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  336.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category));
  337. }/*1110001 (7)*/
  338. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  339.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'OptionEtc'=>$OptionEtc));
  340. }/*1110010 (7)*/
  341. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  342.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Option2'=>$Option2));
  343. }/*1110011 (7)*/
  344. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  345.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  346. }/*1110100 (7)*/
  347. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  348.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Option1'=>$Option1));
  349. }/*1110101 (7)*/
  350. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  351.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  352. }/*1110110 (7)*/
  353. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  354.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2));
  355. }/*1110111 (7)*/
  356. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND !is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  357.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  358. }/*1111000 (7)*/
  359. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  360.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date));
  361. }/*1111001 (7)*/
  362. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  363.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'OptionEtc'=>$OptionEtc));
  364. }/*1111010 (7)*/
  365. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  366.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option2'=>$Option2));
  367. }/*1111011 (7)*/
  368. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND !is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  369.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  370. }/*1111100 (7)*/
  371. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND !is('OptionEtc')){
  372.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1));
  373. }/*1111101 (7)*/
  374. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND !is('Option2') AND $OptionEtc=is('OptionEtc')){
  375.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'OptionEtc'=>$OptionEtc));
  376. }/*1111110 (7)*/
  377. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND !is('OptionEtc')){
  378.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2));
  379. }/*1111111 (7)*/
  380. elseif($Search=is('Search') AND $Type=is('Type') AND $Category=is('Category') AND $Date=is('Date') AND $Option1=is('Option1') AND $Option2=is('Option2') AND $OptionEtc=is('OptionEtc')){
  381.    $this->setFiltro(array('Search'=>$Search, 'Type'=>$Type, 'Category'=>$Category, 'Date'=>$Date, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc));
  382. }
La función que manejo en el código anterior is(), hace algo parecido a isset(). Si la variable existe, retorna el contenido, si no regresa retorna false evitando el Warning cuando una variable no existe y la intentamos usar.
  1. /*
  2.     * Determina si una variable existe
  3.     */
  4.    function is($tipo,$method='_GET'){
  5.          if($method=='_GET' and array_key_exists($tipo, $_GET) and $tipo = $_GET[$tipo])
  6.             return $tipo;
  7.          return false;
  8.       }

Estoy loco, lo se, lo se, ¡no se lo que digo!, @___@ y mañana que regrese, se que intentaré eliminar el post!!! :( por tanta mensada sin sentido... mejor me voy a tomar fotos.

Ojalá exista alguien ahí afuera que me entienda o al menos comprenda //puf

16 comentarios en Generando IFs con PHP // Lo mas loco que se me ha ocurrido @_@

PoKeSaFaRi

Primero de todo, saludos!

En cuanto a tu idea, algo similar he escrito alguna vez en mis códigos, aunque no de esta manera, pero si, generaba condiciones a partir de php. Así que al menos, hay otro loco como tu!

Aunque a lo mejor...-segun el caso- te vendria mejor un switch, no crees?

Victor De la Rocha

Hola, jeje, mmm... con switch creo que de todas formas tendría que hacer todas las combinaciones posibles. Sólo sería una forma distinta de codificar la solución.

No se trata solo de saber si es un tipo, sino que pueden existir dos o tres tipos a la ves en estado de TRUE por lo que debo hacer la combinación entre ellos //puf

Me es muy dificil explicar esto, por eso digo que si, enloquecí ayer :D

PoKeSaFaRi

Claro, si entra en varios IFs.. entonces un switch es inutil. Pero si, ya entiendo por donde vas.

Me pregunto si haciendo alguna cosa rara como una tabla de Karnaugh o algo se podría reducir el número de condicionales en esta tabla de la verdad. Porque digo yo que debe haber alguna forma de minimizar tanta expresion lógica... ¡Estaría bien probarlo! :D

shakaran

Creo que has hecho una locura inmensa. Porque todo ese código tiene muchísimo coste en eficiencia para generarse, aparte de que luego para ejecutarse sera mucho mayor, con lo que produce un resultado muy negativo para el cliente.

He observado el código y parece que solo llamas a la funcion setFilter con los tipos que se activan, por lo tanto creo que es innecesario comprobar los que no sean y meterlos como condición.

Puedes probar esto a ver si te ayuda en la solución a tu problema:

[php]setFiltro(array('Search'=>$Search));
if(is('Type')) $this->setFiltro(array('Type'=>$Type));
if(is('Category')) $this->setFiltro(array('Category'=>$Category));
if(is('Date')) $this->setFiltro(array('Datec'=>$Date));
if(is('Option1')) $this->setFiltro(array('Option1'=>$Option1));
if(is('Option2')) $this->setFiltro(array('Option2'=>$Option2));
if(is('OptionEtc')) $this->setFiltro(array('OptionEtc'=>$OptionEtc));[/php]

# Aunque para N opciones quedaria mas eficiente y elegante un foreach con los filtros a pasar
[php]foreach($filtro => $f as $v) if(is($v)) $this->setFiltro(array($v=>${$v}));
?>[/php]

No me he leido todo el articulo, pero creo que es eso lo que querias. Por otro lado, no he compilado este código que te he escrito a si puede ser que falte alguna comilla, parentesis o punto y coma.

Espero que te ayude.

Victor De la Rocha

Si, fué una locura. Al día siguiente vine en si, y sólo quedó como historía...

Al final de cuentas lo que setFiltro hace, es crear una consulta SQL en base a lo que esté activado.

Utilicé el operador ternario y concatenaciónes y quedó algo super reducido de no mas de 10 líneas y eso por que utilicé saltos de línea para que el código quede legible.

Gracias :D

pablasso

shakaran, no ayuda nada a la eficiencia de ese código solamente tenerlo en una sola linea (mucho menos aun utilizar un ciclo para cada combinación multiple!), es la misma locura inmensa pero revolcada.

Aquí el problema es tratar de reducir el numero de combinaciones a revisar, que seguro no todas las combinaciones posibles dan resultados distintos..

Instala un plugin para darle seguimiento a los comentarios victor!

insane

Yo hace mucho tiempo hice algo parecido...

[php]//Se usa asi...
echo ( is(10,100, array("","==") ,"|") ) ? "true" : "false";
//Se lee..
//10 y 100 son : o == ?????
//Notese que el 'o' es por el pipe, igual podriamos ahaber puesto || o &&

function is($_0, $_1, $mixedParams, $cmp="&"){ # +remi
$_=($cmp=="&")? 1 : 0;
$_a=array("==",">=","<=","!=");
for($i=0;$i<count($mixedParams);$i++){
if(in_array($mixedParams[$i],$_a))
eval('$_'.$cmp.'=((''.$_0.'''.$mixedParams[$i].'''.$_1.''));'.'');
}
return $_;
}[/php]

Victor De la Rocha

arg, que loco @_@ por mas que leo no le entiendo :P

snatic

Hola mi estimado vic,

La verdad si que estas loco, aunque yo he hecho algo similar pero en rutinas de javascript, aunque no se compara con tus locuras, pero creo que para mejorar la eficiencia de tu programa seria mas practico si lo simplificaras en una clase, algo no muy facil de dijerir pero que puede mejorar la respuesta de tu codigo, pero bueno solo queria saludarte, esperemos que estes bien

Victor De la Rocha

estas loco snactic :D jeje

Tal y cuas

de casualidad...
mmmmmmmm, no se, demasiado largo de leer, vi esto de casualidad, pero te digo como otro método q te podría valer....

se asigna a cada uno un valor, de los siguientes... (de casualidad)

1,2,4,8,16,32,64,128,256,512,1024,2048....y así con los q necesites

luego...
if(loquesea()) total+=1;
if(loqueseo()) total+=2;
if(loquesey()) total+=4;

y así.... y el total te dará un número único (ejemplo: 3421), q haciendo luego una función (yo tenía una por ahí), puedes sacar la info q quieras del número (y además en una base de datos queda superordenadito teniendo solo un campo numérico :P)

ala, a shorrarla (de casualidad también)

Luis Abarca

Dijera doña margara, esta interesante esa mariguanada, voy a checarlo.

Saludos, sigue escribiendo esas locuras en una de esas descubres el origen del universo :P

andres

Mmm creo q eso es una de las cosas mas locas q he visto en toda mi vida jajaja

Vamos, si con un ratito q te pongas a pensar saldria mucho mas simple, manejable y extendible

Mira, te paso una idea q se me ocurrio q talvez puedas usar....

Por lo q veo lo q necesitas al final y al cabo es generar un array con este formato :

array('Search'=>$Search, 'Category'=>$Category, 'Option1'=>$Option1, 'Option2'=>$Option2, 'OptionEtc'=>$OptionEtc)

para pasarselo a $this->setFiltro().

Bueno, eso se soluciona con un par de clases mira:

Primero creamos una clase abstracta q va a servir para todo nuestros tipos de filros (categoria, opcion1, opcion2, etc):

abstract class AFiltro
{
public var key;
public var data;

public function __construct($key, $data)
{
$this->key = $key;
$this->data = $data;
}

abstract function isValid();

public function addToArray($arr)
{
if(!is_null($arr))
$arr = array();

return $arr[$this->key] = $this->data;
}
}

Luego creamos sus implementaciones para cada tipo de validacion, una por cada validacion (pongo solo el ejemplo de una):

public class FiltroIsDate extends AFiltro
{
public function __construct($key, $data)
{
parent::__construct($key, $data);
}

public function isValid()
{
return true; //aca va el codigo de la validacion
}
}

Ahora vamos a ver como usamos esto para generar el array:

$vecDatos = array(
new FiltroIsDate("claveIsDate", $date),
new FiltroIsCategory("claveIsCategory", $category)
); // y asi vas completando todo

$dataFilter = array();
for ( $data in $vecDatos)
{
if ( $data->isValid())
{
$dataFilter = $data->addToArray($dataFilter);
}
}

$this->setFiltro($dataFilter);

Bueno, espero q te sirva esta solucion....

Saludos!

Victor De la Rocha

Hola Andres, gracias por comentar.

Yo realmente no creo que este problema como tal tenga una solución dado que ya está resuelto pero es una completa locura. Es un mundal de validaciones que en realidad son innecesarias. El objetivo de este problema puede lograrse mediante otras vías, por ejemplo dado que el problema símplementa era saber si tal opción estaba activada: En la parte donde estuviera estructurando la consulta SQL para extraer dichos registros que coincidieran con dicha opción yo sólo uso el operador ternario:

($opcion1?"condiciones para traer equis registros":null)

Y así evito inventar un mundal de validaciones combinadas...

No olvidemos que el contenido de esta entrada sólo era para demostrar la locura que lleva estar tras un escritorio con una Coca Cola como único alimento a la mano jeje

Xpolito

Es grandioso el trabajo que haces, no se PHP ni un 20%; pero entiendo las estructuras de control... Esta super-divagado! tu idea... siento que son esas cosas que andan por la mente queriendo salir de algun modo, aunque no sean utiles.

Y digo lo último, por que para que querria alguien controlar las 128 combinaciones? [en este caso]

Bueno como sea es sorprendente.

Mapas de Karnaugh - X
!!! Y si !!! Esto no tiene ninguna utilidad!!!... por que tanto trabajo es saber cual combinacion es exactamente, y tanto más indicar que hacer en ese caso. ¿o no?

Wiserlander

Saludos gente!

Muy interesante los aportes en general, aunque algunos estamos locos XD... hay que decir que a muchos historicos tambien los llamaron locos jejeje

Buen desarrollo del tema, bueno aportes, saludos.

Deja un comentario

¿Cuanto es 2 + 3 - 5? =

Suscribirse a los comentarios.