Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/10/2012, 17:50
Avatar de portalmana
portalmana
 
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: string creciente con todas las letras

Bueno mira yo tenia algo que era muy parecido a lo que tu querías, que era para calcular el nombre de una Columna Excel.
Le realice algun cambio y te lo pongo a continuación.
Código PHP:
Ver original
  1. <?php
  2. error_reporting(E_ALL | E_STRICT);
  3.  
  4. class ColumnasExcel
  5. {
  6.     /**
  7.      * Contiene Los caracteres con los que se formaran la cadena final.
  8.      * @var string
  9.      */
  10.     private $_cadenaSalida  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  11.    
  12.     /**
  13.      * Contiene el Tamaño de la cadena de caracteres de salida.
  14.      * @var integer
  15.      */
  16.     private $_largo;
  17.    
  18.     /**
  19.      * Constructor de Clase
  20.      * @param   string  $cadenaSalida   Si se quiere una cadena distinta a las letras de Excel
  21.      *                                  Se puede Configurar aqui o con el metodo setCadenaSalida.
  22.      */
  23.     public function __construct($cadenaSalida = '')
  24.     {
  25.         if (!empty($cadenaSalida)) {
  26.             $this->_cadenaSalida = $cadenaSalida;
  27.         }
  28.         $this->_largo = strlen($this->_cadenaSalida);
  29.     }
  30.    
  31.     /**
  32.      * Configura una Nueva cadena de Salida.
  33.      * @param   string  $cadenaSalida   Configura una nueva cadena de salida.
  34.      */
  35.     public function setCadenaSalida($cadenaSalida)
  36.     {
  37.         $this->_cadenaSalida    = $cadenaSalida;
  38.         $this->_largo           = strlen($this->_cadenaSalida);
  39.     }
  40.    
  41.     /**
  42.      * Convierte un Entero a Una Cadena de Letras.
  43.      * @param   integer $numero Numero a Convertir
  44.      * @return  string
  45.      */
  46.     function getNumeroALetra($numero)
  47.     {
  48.        
  49.         $cadena = '';
  50.         do {
  51.            $entero  = (int)( $numero / $this->_largo );
  52.            $resto   = ( $numero % $this->_largo );
  53.            //$cadena  = chr(65 + $resto) . $cadena;
  54.            $cadena = substr($this->_cadenaSalida, $resto,1) . $cadena;
  55.            
  56.            $numero  = $entero - 1 ;
  57.         } while ($entero);
  58.        
  59.         return $cadena;
  60.     }
  61.    
  62.     /**
  63.      * Cantidad Maxima de letras en el resultado Final
  64.      * @param   integer $max    Maxima cantidad de caracteres del resultado
  65.      * @return  integer
  66.      */
  67.     public function tamanioMaximoCadena($max)
  68.     {
  69.         $max        = intval($max);
  70.         $resultado  = 0;
  71.        
  72.         for ($i=1; $i <= $max; $i++) {
  73.             $resultado+= bcpow($this->_largo, $i);
  74.         }
  75.        
  76.         return ($resultado - 1);
  77.     }
  78. }
Ahora como se usa, antes decirte que las interaciones podrían ser muchísimas y se te colgara el apache quizás.
El set_time_limit(0); al inicio es para que nos deje que nuestro script tenga vida ilimitada, esto en un server no creo que funcione por seguridad, de ultimo cuando se le termine el tiempo te largara un error fatal de que se le termino el tiempo asignado.
Código PHP:
Ver original
  1. // Creo una instancia del objeto
  2. $obj            = new ColumnasExcel();
  3. // Veo cuantos caracteres como maximo tenga la cadena de salida
  4. $iteraciones    = $obj->tamanioMaximoCadena(4);
  5. echo 'Se realizaran ' . $iteraciones . ' iteraciones.<br>';
  6. for ($i=0; $i <= $iteraciones; $i++)
  7. {
  8.     echo $i . ' = ' . $obj->getNumeroALetra($i) . '<br>';
  9.    
  10. }
Si quisiera otra cadena de Caracteres, podemos definirla en la creacion del objeto.
Código PHP:
Ver original
  1. $obj            = new ColumnasExcel('ABCD');
  2. // o luego de instanciado
  3. $obj            = setCadenaSalida('0123');

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp