Hoje eu estava programando alguns scripts e encontrei um pequeno problema de usar um padrão definido.
O padrão é criar arquivos onde a sequência inicia em 0 (zero) e não pode ser repetido até Z.
Exemplo:
myfile0.ext, myfile1.ext, myfile2.ext, (...), myfile9.ext, myfileA.ext, myfileB.txt, (...), myfileZ.txt
Bem, Isto não é um grande problema, então eu uso esse código.
// Filename $seq = $last_used_seq = ''; $seqs = array_merge(range('0','9'), range('A', 'Z'));] $l = 1; while (!in_array($seq, $seqs)) { $seq = chr(ord($last_used_seq) + $l++); }
Mas
$Seq
Não deu o valor esperado de 0 (zero) na primeira execução. Em vez disso, estava em branco.
As variáveis de depuração, Eu vi que o while Nunca é avaliada como true. A tentativa de reproduzir na linha de comando que vi
in_array($Seq, $PDCs);
sempre retornar true. Eu tentei usar “”, “R” e não importa qual o valor que eu usei, ainda retornando true.
Então eu mudar para usar STRICT argumento para in_array to true and works for ‘;A’; through ‘;Z’;, but not for ‘;0’; through ‘;9’;.
while (!in_array($seq, $seqs, true)) { $seq = chr(ord($last_used_seq) + $l++); }
Damn…; PHP é certo, “;0”; Não é estritamente iguais para 0. O Chr função de retorno string e
gama('0', '9')
Cria um array com integer valores.
Então, Eu mudei a abordagem para avaliar todos os valores com STRICT, Porque eu gostaria de criar um código limpo sem nenhuma outras funções para ser usado.
This is the final code that I’;usando o m:
// $seq de valores iniciais = ';
$PDCs = array_merge(gama(Ord('0'),Ord('9')), gama(Ord('A'), Ord('Z')));
$PDCs = array_map(«chr», $PDCs);
$l = 1;
ao mesmo tempo (!in_array($Seq, $PDCs, true)) {
$Seq = chr(Ord($infos['last_seq']) + $l + +);
}
// Nomes de arquivo foreach ($itens_for_files as $key => $itens) {
// ... Mais códigos para preencher o arquivo $seq = chr(Ord($Seq) + 1);
ao mesmo tempo (!in_array($Seq, $PDCs, true)) {
$Seq = chr(Ord($Seq) + 1);
$FileName = 'myfile' . $Seq . 'ext';
// ...
}
Como você pode ver, Eu mudei o $seqs initial values from ‘;0’; para seu ASCII código e voltar ao seu valor que me deu um array com todos os valores em string type.
Até mais!