
Problema al converir en entero una cadena de caractéres de un vector.
Publicado por forero (2 intervenciones) el 15/11/2016 16:15:14
Buenas tardes,
Estoy haciendo una revisión de una parte de un programa en php en el que actualmente se generan códigos de cliente que son una cadena de caracteres de 6 números (no hay letras ni símbolos). Por ejemplo. 080001, 080002, 280004, etc.
Ahora queremos que los nuevos códigos sean una cadena sea de 2 letras + 4 números. Por ejemplo, ES0001, ES0002, PT0001, etc.
El código del programa funcional que lee de la base de datos los códigos existentes y busca huecos vacíos (viene de un sistema que se escogía el código al gusto del que creaba el cliente) es:
Donde codclientes es un array que almacena cada uno de los códigos existentes (por ejemplo codclientes=("080001"," 080002", "280004",...).
Mi revisión es la siguiente. Como tengo que eliminar los dos primeros caracteres, la búsqueda en la base de datos la he reemplazado por:
Donde $rest es igual a los dos caracteres a eliminar (por ejemplo "ES"). El resultado probado directamente en mysql es correcto y devuelve ("ES0001", "ES0002")
Y simplemente he sustituido:
por:
Donde substr me deja simplemente los 4 últimos caracteres que son números. Por ejemplo 0001.
Pues en vez de devolver un 1 (en el ejemplo), devuelve siempre 0.
Curiosamente, si en vez de pongo como prueba , lo hace correctamente.
Deduzco que es un problema de cómo interpreta substr el array pero por más que he buscado no he encontrado nada que me de una pista de como resolver el problema.
¿Alguna idea?
Muchas gracias de antemano por vuestra ayuda.
Estoy haciendo una revisión de una parte de un programa en php en el que actualmente se generan códigos de cliente que son una cadena de caracteres de 6 números (no hay letras ni símbolos). Por ejemplo. 080001, 080002, 280004, etc.
Ahora queremos que los nuevos códigos sean una cadena sea de 2 letras + 4 números. Por ejemplo, ES0001, ES0002, PT0001, etc.
El código del programa funcional que lee de la base de datos los códigos existentes y busca huecos vacíos (viene de un sistema que se escogía el código al gusto del que creaba el cliente) es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$codclientes = $this->db->select("SELECT ".$this->db->sql_to_int('codcliente')." AS cod FROM ".$this->table_name." ORDER BY cod ASC;");
if($codclientes)
{
foreach($codclientes as $n)
{
if( intval($n['cod']) > $num)
{
$encontrado = TRUE;
break;
}
else
$num++;
}
}
else
{
return sprintf('%06s', intval($num));
}
}
if($encontrado)
{
return sprintf('%06s', intval($num));
}
else
{
if ($num<$max)
{
return sprintf('%06s', intval($num));
}
else
{
return sprintf('%06s','NO_HAY');
}
}
Donde codclientes es un array que almacena cada uno de los códigos existentes (por ejemplo codclientes=("080001"," 080002", "280004",...).
Mi revisión es la siguiente. Como tengo que eliminar los dos primeros caracteres, la búsqueda en la base de datos la he reemplazado por:
1
$codclientes = $this->db->select("SELECT ".$this->db->sql_to_int('codcliente')." AS cod FROM ".$this->table_name." WHERE codcliente REGEXP '^$rest' ORDER BY cod ASC;")
Donde $rest es igual a los dos caracteres a eliminar (por ejemplo "ES"). El resultado probado directamente en mysql es correcto y devuelve ("ES0001", "ES0002")
Y simplemente he sustituido:
1
intval($n['cod']) > $num
por:
1
intval(substr($n['cod'],-4)) > $num
Donde substr me deja simplemente los 4 últimos caracteres que son números. Por ejemplo 0001.
Pues en vez de devolver un 1 (en el ejemplo), devuelve siempre 0.
Curiosamente, si en vez de
1
substr($n['cod'],-4)
1
substr("ES0001",-4)
Deduzco que es un problema de cómo interpreta substr el array pero por más que he buscado no he encontrado nada que me de una pista de como resolver el problema.
¿Alguna idea?
Muchas gracias de antemano por vuestra ayuda.
Valora esta pregunta


0