Foros del Web » Programando para Internet » PHP »

is_numeric(1) = FALSE?

Estas en el tema de is_numeric(1) = FALSE? en el foro de PHP en Foros del Web. Hola buenas, Después de buscar y buscar, me encuentro con que la función is_numeric pasándole como argumento el número 1 me devuelve falso... Sería correcto ...
  #1 (permalink)  
Antiguo 01/07/2011, 01:28
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años
Puntos: 165
is_numeric(1) = FALSE?

Hola buenas,

Después de buscar y buscar, me encuentro con que la función is_numeric pasándole como argumento el número 1 me devuelve falso...

Sería correcto hacer esto para solucionar el problema?

Código PHP:
Ver original
  1. if(!is_numeric((int)$id)) {
  2.                 echo 'es un numero?';
  3.             }

Un saludo!
  #2 (permalink)  
Antiguo 01/07/2011, 02:26
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 10 meses
Puntos: 331
Respuesta: is_numeric(1) = FALSE?

Depende del valor que pases en $id, la función is numeric funciona con 1, parece más bien un problema de parámetros. Prueba esto:

Código PHP:
Ver original
  1. <?php
  2.  
  3. ini_set("display_errors", 1);
  4.  
  5. $vars[] = 1;
  6. $vars[] = "hola";
  7. $vars[] = true;
  8. $vars[] = array();
  9. $vars[] = null;
  10.  
  11. foreach ($vars as $key => $value) {
  12.     if(is_numeric($value)) echo "$value Es numérico!<br>";
  13.     if(is_numeric((int)$value)) echo "(int)$value Es numérico!<br>";
  14. }
  15.  
  16.  
  17. ?>
Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 01/07/2011, 02:56
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años
Puntos: 165
Respuesta: is_numeric(1) = FALSE?

De acuerdo,

Muchas gracias, lo probaré. Entonces fuerzo el (int)?

Un saludo!
  #4 (permalink)  
Antiguo 01/07/2011, 03:01
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 10 meses
Puntos: 331
Respuesta: is_numeric(1) = FALSE?

NO, si fuerzas el casting, entonces la variable SIEMPRE será integer. Lo que tienes que hacer es pasar el valor correcto. Claro que sin ver el código no puede decirte nada mas. Salu2!!
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 01/07/2011, 03:04
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 11 meses
Puntos: 202
Respuesta: is_numeric(1) = FALSE?

Cita:
Iniciado por miktrv Ver Mensaje
Hola buenas,

Después de buscar y buscar, me encuentro con que la función is_numeric pasándole como argumento el número 1 me devuelve falso...

Sería correcto hacer esto para solucionar el problema?

Código PHP:
Ver original
  1. if(!is_numeric((int)$id)) {
  2.                 echo 'es un numero?';
  3.             }

Un saludo!
jejejje no te ofendas pero es sólo un despiste que has tenido.
Fíjate que estás negando la condición: if(!is_numeric((int)$id))
Si le quitas el ! te funcionará correctamente incluso si $id lo pones como un string.

Código PHP:
    <?php
    $id
='1';
    
    if(
is_numeric((int)$id))
        echo 
'es un numero'
    
?>
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #6 (permalink)  
Antiguo 01/07/2011, 03:07
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 2 meses
Puntos: 261
Respuesta: is_numeric(1) = FALSE?

Cita:
Iniciado por IEKK Ver Mensaje
jejejje no te ofendas pero es sólo un despiste que has tenido.
Fíjate que estás negando la condición: if(!is_numeric((int)$id))
Si le quitas el ! te funcionará correctamente incluso si $id lo pones como un string.

Código PHP:
    <?php
    $id
='1';
    
    if(
is_numeric((int)$id))
        echo 
'es un numero'
    
?>
Al principio pensé lo mismo, pero no sabía si ese es el code que ponía para solucionarlo, o es el que le da el error.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #7 (permalink)  
Antiguo 01/07/2011, 03:11
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años
Puntos: 165
Respuesta: is_numeric(1) = FALSE?

Disculpas, es un error, en la frase ponía NO es un número... jajaja es decir, el error existe con la función.

Mi código le pasa un id extarido de la base de datos. Ese valor siempre es un INT ya que es un autocincrement. Lo único que se me ocurre es que lo devuelva como string.. uso la librería database de CodeIgniter.

Un saludo!
  #8 (permalink)  
Antiguo 01/07/2011, 03:24
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 11 meses
Puntos: 202
Respuesta: is_numeric(1) = FALSE?

Cita:
Iniciado por miktrv Ver Mensaje
Disculpas, es un error, en la frase ponía NO es un número... jajaja es decir, el error existe con la función.

Mi código le pasa un id extarido de la base de datos. Ese valor siempre es un INT ya que es un autocincrement. Lo único que se me ocurre es que lo devuelva como string.. uso la librería database de CodeIgniter.

Un saludo!
Ahhhhhhhhhhh pero entonces la cosa cambia. Si quieres diferenciar si NO es un número entonces el (int) sobra ya que este lo fuerza y hasta convierte una cadena.

Código PHP:
    <?php    

    
//$id='1';
    //$id=1;
    
$id='ewrwerwerwe';
    
    if(! 
is_numeric($id))
        echo 
'NO es un numero'
    else    
        echo 
'SI es un numero'
    
?>
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #9 (permalink)  
Antiguo 01/07/2011, 03:29
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años
Puntos: 165
Respuesta: is_numeric(1) = FALSE?

Menudo liooo... jaja

Entonces básicamente como lo soluciono? si estoy pasándole un 1 extraido de la base de datos y me dice que no es un numeric?

Un saludo!
  #10 (permalink)  
Antiguo 01/07/2011, 03:38
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 11 meses
Puntos: 202
Respuesta: is_numeric(1) = FALSE?

Cita:
Iniciado por miktrv Ver Mensaje
Menudo liooo... jaja

Entonces básicamente como lo soluciono? si estoy pasándole un 1 extraido de la base de datos y me dice que no es un numeric?

Un saludo!
Vamos a ver el is_numeric está bien.
Seguramente cuando recoges los datos desde la BD se te pasa como cadena.
¿Qué tipo es el campo donde guardas ese valor en la tabla? jejeje

No obstante si necesitas que sea como cadena usa el (int) pero añade que el valor sea > 0 y listo.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #11 (permalink)  
Antiguo 01/07/2011, 03:39
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años
Puntos: 165
Respuesta: is_numeric(1) = FALSE?

El tipo de la base de datos es un INT.. autoincremental.

Pero.. is_numeric(1) devería de devolver TRUE... aunque sea "1", no?

Un saludo!
  #12 (permalink)  
Antiguo 01/07/2011, 03:42
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 2 meses
Puntos: 261
Respuesta: is_numeric(1) = FALSE?

Cita:
Iniciado por miktrv Ver Mensaje
El tipo de la base de datos es un INT.. autoincremental.

Pero.. is_numeric(1) devería de devolver TRUE... aunque sea "1", no?

Un saludo!
Correcto!, pero si le pones "!" delante como tienes en el primer code que pusiste devolverá false.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #13 (permalink)  
Antiguo 01/07/2011, 03:44
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 11 meses
Puntos: 202
Respuesta: is_numeric(1) = FALSE?

Cita:
Iniciado por miktrv Ver Mensaje
El tipo de la base de datos es un INT.. autoincremental.

Pero.. is_numeric(1) devería de devolver TRUE... aunque sea "1", no?

Un saludo!
¡No! Si lo pasas como cadena da false.

is_numeric(1) = true
is_numeric('1') = false

Por eso te dije que si el valor es una cadena uses el int pero poniendo que sea mayor que 0 ya que (int)'rwerwerwerew'=0
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #14 (permalink)  
Antiguo 01/07/2011, 03:44
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años
Puntos: 165
Respuesta: is_numeric(1) = FALSE?

Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Correcto!, pero si le pones "!" delante como tienes en el primer code que pusiste devolverá false.
Ai una confusión, el tema de ! delante ya se que es para negación, como he dicho antes, la frase del condicional no es esa, si no que sería "NO es un número".

Un saludo!
  #15 (permalink)  
Antiguo 01/07/2011, 03:48
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 11 meses
Puntos: 202
Respuesta: is_numeric(1) = FALSE?

Resolvamos esta tontería de una vez que no hay que darle tantas vueltas jeje.

Código PHP:
    <?php    
    $id
="24";
    
$id="rwerwerwerw"//esto al hacerle (int) te dice que es un numero pq se convierte en 0.
    
     
if(is_numeric((int)$id) and (int)$id>0)  echo 'es un numero';
    
?>
Si quitas el segundo $id= veras que te es correcto, el segundo daría 0 y no entraría al poner >0 en la condición.
No te afecta el 0 ya que tu campo es un autoincrement y número, por tanto con eso tienes ya sea '1' ó 1.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #16 (permalink)  
Antiguo 01/07/2011, 03:53
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 3 meses
Puntos: 326
Respuesta: is_numeric(1) = FALSE?

is_numeric devuelve true si es un número (aunq sea una cadena, si contiene un número sólo, será true tb!). False en caso de no ser un número.

por ejemplo:
Código PHP:
$a '1';
$b '123';
$c "1";
$d 1;
$e = (string)1;

echo 
'$a -> ';
echo 
is_numeric($a);
echo 
"<br>";

echo 
'$b -> ';
echo 
is_numeric($b);
echo 
"<br>";

echo 
'$c -> ';
echo 
is_numeric($c);
echo 
"<br>";

echo 
'$d -> ';
echo 
is_numeric($d);
echo 
"<br>";

echo 
'$e -> ';
echo 
is_numeric($e);
echo 
"<br>";

echo 
var_dump($e); 
Te dará como resultado:
$a -> 1
$b -> 1
$c -> 1
$d -> 1
$e -> 1
string(1) "1"

Todo true, y el último elemento está forzado para ser una string ;)

Así pues, la forma correcta (sin forzar conversión ¬¬) sería
Código PHP:

if ( is_numeric($id) ) {
     
//Aqui lo q hay que hacer si es un número (en teoria, siempre!)
     
}
else {
    
//Mensaje de error? $id no es un número!
   

Si fuerzas la conversión (si pones (int)$id ) puede falsear resultados!
  #17 (permalink)  
Antiguo 01/07/2011, 03:57
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años
Puntos: 165
Respuesta: is_numeric(1) = FALSE?

Pues entonces no se que estoy haciendo mal... lo reviso de nuevo todo porque seguro que se me escapa alguna chorrada...

Un saludo!
  #18 (permalink)  
Antiguo 01/07/2011, 03:57
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años
Puntos: 165
Respuesta: is_numeric(1) = FALSE?

PD: Karma para todos :D!!

Etiquetas: false
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:09.