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:
// Inicial de valores $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 ++);
}
// Nombres de archivos foreach ($itens_for_files as $key => $itens) {
// ... Y otro para llenar el archivo $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!