Ver Mensaje Individual
  #6 (permalink)  
Antiguo 09/02/2009, 21:58
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [ APORTE ] parsear URLs de referals como Google y Yahoo

Como ya te mencione en otro post, hablar de eficiencia es discutir quien fue primero, si el huevo o el gallo Ineficiente dices porque recorre el array, pero al hacer if... elseif... elseif... igual estamos evaluando condiciones una y otra vez. Por otro lado, no veo cuál es el problema en usar break; para romper el ciclo o continue; para saltar un loop. Además, usando un foreach el código se vuelve más flexible, pues para agregar buscadores sólo hace falta agregar el patrón al array. Incluso, en algún caso, podría usarse una base de datos para extraer los patrones y buscar. Es eficiente cuando uno mismo afirma que lo es.

Ahora, claro que se puede usar switch. Como te darás cuenta en el siguiente código, hay pequeños trucos que buscan explotar al máximo las cualidades de php

Código php:
Ver original
  1. function parse_referal() {
  2.  
  3.     // Le modifiqué esta línea para probar
  4.     # $referer = $_SERVER['HTTP_REFERER'];
  5.    $referer = 'http://search.msn.com/results.aspx?q=okram&FORM=MSNTST';
  6.  
  7.     $pattern = array ('google' => '/&q=([0-9a-zA-Z.\+%]{1,})/',
  8.                       'yahoo' => '/\?p=([0-9a-zA-Z.\+%]{1,})/',
  9.                       'msn' => '/\?q=([0-9a-zA-Z.\+%]{1,})/' );
  10.  
  11.     $matches = array(); // vacio
  12.  
  13.     switch(true):
  14.         case strstr($referer,'yahoo.'):
  15.             preg_match($pattern['yahoo'], $referer, $matches);      
  16.             break;
  17.         case strstr($referer,'msn.'):
  18.             preg_match($pattern['msn'], $referer, $matches);
  19.             break;
  20.         case strstr($referer,'google.'):
  21.             preg_match($pattern['google'], $referer, $matches);      
  22.             break;
  23.         default:
  24.             return false;
  25.             break;
  26.     endswitch;
  27.          
  28.     return ($matches[1]);  
  29.  
  30. }

Por último, como también ya te lo dije en otro mensaje, debes hacer el código lo más "readable" posible. Quiero decir, de fácil lectura. Para ello un poco de orden estaría bien. El servidor no te reclamará nada si ve tu código en más o menos líneas. Hay un artículo... dale una ojeada