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<?php
class ColumnasExcel
{
/**
* Contiene Los caracteres con los que se formaran la cadena final.
* @var string
*/
private $_cadenaSalida = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
/**
* Contiene el Tamaño de la cadena de caracteres de salida.
* @var integer
*/
private $_largo;
/**
* Constructor de Clase
* @param string $cadenaSalida Si se quiere una cadena distinta a las letras de Excel
* Se puede Configurar aqui o con el metodo setCadenaSalida.
*/
public function __construct($cadenaSalida = '')
{
if (!empty($cadenaSalida)) { $this->_cadenaSalida = $cadenaSalida;
}
$this->_largo
= strlen($this->_cadenaSalida
); }
/**
* Configura una Nueva cadena de Salida.
* @param string $cadenaSalida Configura una nueva cadena de salida.
*/
public function setCadenaSalida($cadenaSalida)
{
$this->_cadenaSalida = $cadenaSalida;
$this->_largo
= strlen($this->_cadenaSalida
); }
/**
* Convierte un Entero a Una Cadena de Letras.
* @param integer $numero Numero a Convertir
* @return string
*/
function getNumeroALetra($numero)
{
$cadena = '';
do {
$entero = (int)( $numero / $this->_largo );
$resto = ( $numero % $this->_largo );
//$cadena = chr(65 + $resto) . $cadena;
$cadena = substr($this->_cadenaSalida
, $resto,1) . $cadena;
$numero = $entero - 1 ;
} while ($entero);
return $cadena;
}
/**
* Cantidad Maxima de letras en el resultado Final
* @param integer $max Maxima cantidad de caracteres del resultado
* @return integer
*/
public function tamanioMaximoCadena($max)
{
$resultado = 0;
for ($i=1; $i <= $max; $i++) {
$resultado+= bcpow($this->_largo
, $i); }
return ($resultado - 1);
}
}
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// Creo una instancia del objeto
$obj = new ColumnasExcel();
// Veo cuantos caracteres como maximo tenga la cadena de salida
$iteraciones = $obj->tamanioMaximoCadena(4);
echo 'Se realizaran ' . $iteraciones . ' iteraciones.<br>';
for ($i=0; $i <= $iteraciones; $i++)
{
echo $i . ' = ' . $obj->getNumeroALetra($i) . '<br>';
}
Si quisiera otra cadena de Caracteres, podemos definirla en la creacion del objeto.
Código PHP:
Ver original$obj = new ColumnasExcel('ABCD');
// o luego de instanciado
$obj = setCadenaSalida('0123');
Saludos