Nombres de archivos con lista de 0 a la Z
Hoy fue la codificación algunos scripts y encontró un pequeño problema con un patrón definido.
El patrón es crear archivos donde la secuencia se inicia en 0 (cero) y no puede repetirse hasta Z.
Ejemplo:
myfile0.ext, myfile1.ext, myfile2.ext, (...), myfile9.ext, myfileA.ext, myfileB.txt, (...), myfileZ.txt
Bien, Esto no es un gran problema por lo utilizar este 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++); }
Pero
$Seq
no dio el valor esperado de 0 (cero) en la primera carrera. En su lugar, fue en blanco.
Depuración de las variables, He visto que la while nunca se evalúa a true. Intentar reproducir en la línea de comandos vi
in_array($Seq, $seqs);
siempre volver true. Intenté utilizar “”, “R” y no importa qué valor, volviendo todavía true.
Por lo tanto cambiar para utilizar 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 es correcto, “;0”; no es estrictamente igual a 0. El Chr función de retorno string y
rango('0', '9')
crea un array con integer valores.
Por lo tanto, Cambié el enfoque para evaluar todos los valores con STRICT, porque me gustaría crear un código limpio y sin ninguna otras funciones para utilizar.
This is the final code that I’;uso de m:
// Initial values $seq = ''; $seqs = array_merge(rango(Ord('0'),Ord('9')), rango(Ord('A'), Ord('Z'))); $seqs = array_map('chr', $seqs); $l = 1; al mismo tiempo (!in_array($Seq, $seqs, true)) { $SEQ = chr(Ord($Infos['last_seq']) + $l ++); } // Filenames foreach ($itens_for_files as $key => $itens) { // ... Another codes to fill file $seq = chr(Ord($Seq) + 1); al mismo tiempo (!in_array($Seq, $seqs, true)) { $SEQ = chr(Ord($Seq) + 1); $FILENAME = 'miarchivo' . $Seq . ".ext"; // ... }
Cómo se puede ver, He cambiado el $seqs initial values from ‘;0’; a su ASCII el código y volver a su valor que me dio un array con todos los valores de string tipo.
Nos vemos!