Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Geam

Incrementar contador a letra

Recommended Posts

Galera atualmente tenho esta rotina que já funciona da seguinte forma:

 

ela percorre o banco e verifica se o valor já existe (no caso uma letra do alfabeto crescente) se já existe ele me retorna a proxima letra entre as que já existe evitando assim desfalque;

 

$bd = ["A", "B", "D"]; //Este array virá do banco coloquei assim só para vermos o funcionamento

$a = range('A', 'Z');

foreach ($bd as $j):
$unset = array_search($j, $a);
unset($a[$unset]);
endforeach;

$disponivel = implode(', ', $a);
$referencia = explode(', ', $disponivel);

 

$proximo = $referencia[0]; //aqui neste caso ele verificou que está faltando no $bd a letra "C" e irá me retorna ele disponivel para gravar o novo;

 

Tranquilo até aqui blz? porém quando ele preencher todas as vagas, ou seja, qd eu cadastrar todos os registros de A á Z ele não me dará mais opção de gravar, sendo que o que preciso é que por segurança ao chegar no Z ele recomece a rotina incrementando o numero 1, ficando assim:

 

//se no banco estiver assim

$bd = ["A", "B", "D", ... "Z]; //siginifica que todo alfabeto á foi utlizado

entao e me retornaria na variavel $proximo assim:

 

$proximo = "A1"; e assim por diante quando o banco preencher tudo denovo A1, B1, C1... Z1 recomecaria a contagem incrementando o A2, B2, C2....Z2 e por aí vai.

 

espero ter me explicado bem, ajudas serão bem vindas!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para pegar uma letra seguinte não precisa de gambiarra, basta usar incremento.

$letra = "A";

++$letra; // B

// -------------------

// Após chegar em Z
$letra = "Z";

// Iniciará automaticamente com AA, AB, AC, AD...
++$letra; // AA
++$letra; // AB
++$letra; // AC

// --------------------

$letra = "AZ";

++$letra; // BA
++$letra; // BB

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que preciso verificar no banco o que já tem, pq pode ocorrer de haver letras desordenadas tipo (A, E, F) e o que fiz acima faz com que ele verifique o intervalo entre estas que estao no banco e ache a proxima, nao é gambiarra é logica, se fosse so pra incrementar uma letra eu teria feito como vc sugeriu, mas nao é, e alem do mais nao quero incrementar com outra letra e sim com um numero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido, desta forma ele verifica no banco o que já foi cadastrado e sugere apenas o que ainda está disponivel verificando um incremento do alfabeto;

 

$bd = ['A0', 'A2', 'A4', 'A5', 'A8', 'A9', 'B1'];
$refs = 'A0';
$count = count($bd) + 1;
$x = 0;

for ($i = 0; $i < $count; $i++):
$r = ++$refs;

// Verifica o que já foi cadastrado (evita duplicado)
foreach ($bd as $key => $v) :
if ($v == $r):
$r = null;
endif;
endforeach;

// Valores disponiveis
if ($r != null):
$x; // Contar indice disponiveis
if ($x == 0):
$referencia = $r;
endif;
$x++;
endif;
endfor;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.