Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
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.
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;
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