2010-08-27 24 views
8

Necesito ayuda para cambiar un personaje en php. Tengo algo de código de la web:Cómo convertir algunos caracteres en numéricos en php?

char dest='a'; 
int conv=(int)dest; 

¿Puedo utilizar este código para convertir un carácter numérico en? ¿O tienes alguna idea? sólo quiero mostrar el resultado como un número decimal:

if null == 0 
if A == 1 
+6

¿Qué número quieres? El código ascii? – vfn

+0

No, no puedes usar ese código, no es php. – Jasper

+0

solo necesito un número estándar como 0,1,2,3 ... – klox

Respuesta

32

Uso ord() para devolver el valor ASCII. Reste 96 para devolver un número donde a = 1, b = 2 ....

Las letras mayúsculas y minúsculas tienen valores ASCII diferentes, por lo que si desea manejarlos igual, puede usar strtolower() para convertir mayúsculas a minúsculas

Para manejar el caso NULL, simplemente use if($dest). Esto será cierto si $dest es distinto de NULL o 0.

PHP es un lenguaje poco tipado, por lo que no es necesario declarar los tipos. Entonces char dest='a'; es incorrecto. Las variables tienen el prefijo $ en PHP y ninguna declaración de tipo, por lo que debe ser $dest = 'a';.

Live Example

<?php 

    function toNumber($dest) 
    { 
     if ($dest) 
      return ord(strtolower($dest)) - 96; 
     else 
      return 0; 
    } 

     // Let's test the function...   
    echo toNumber(NULL) . " "; 
    echo toNumber('a') . " "; 
    echo toNumber('B') . " "; 
    echo toNumber('c'); 

     // Output is: 
     // 0 1 2 3 
?> 

PS: You can look at the ASCII values here.

+0

No maneja la caja superior correctamente, pero parece estar en el camino correcto. – deceze

+0

@deceze - Eso se debe a que los valores superiores e inferiores tienen valores ASCII diferentes. Edité la respuesta para que la mayúscula se maneje del mismo modo que en minúsculas. –

+0

¿cómo si nulo? quiero si null == 0 – klox

0

Por lo tanto, si necesita el código ASCII que tendrá que hacer:

$dest = 'a'; 
$conv = ord($dest); 

Si quieren algo como:

a == 1 
b == 2 
. 
. 
. 

que debe hacer:

$dest = 'a'; 
$conv = ord($dest)-96; 

Para obtener más información sobre los códigos ASCII: http://www.asciitable.com/

Y para la función ord: http://www.php.net/manual/en/function.ord.php

+2

Eso no es php ... – Jasper

+0

puedo usar este código para obtener un resultado como un número decimal? – klox

+0

Las variables no tienen tipos en php. Debería ser '$ dest = 'a'; $ conv = ord ($ dest); '. –

2

Se trabaja de hecho como en la muestra, excepto que usted debe estar usando la sintaxis php (y como nota al margen: el lenguaje que ese código probablemente encontraste, no hizo lo mismo).

Así:

$in = "123"; 
$out = (int)$in; 

A continuación, el siguiente será cierto:

$out === 123 
+0

Parece que están tratando de obtener el valor ASCII, pero es difícil de decir ... –

+0

¿no se invierte? Deseo que null signifique cero y si escribo A el resultado es 1 – klox

+0

@klox: por favor, repite eso, no tengo ni idea de lo que intentas decir ... – Jasper

1

Es muy difícil de responder porque no es una pregunta real, sino solo un poco.
Pero si lo preguntas.
Parece que necesita un poco de tabla de traducción, que define los vínculos entre letras y números

A -> 2 
B -> 3 
C -> 4 
S -> 1 

o lo que sea.
Puede lograr esto utilizando una matriz, donde las claves serían estas letras y valores: los números deseados.

$defects_arr = array(
    'A' -> 2, 
    'B' -> 3, 
    'C' -> 4' 
    'S' -> 1 
}; 

Por lo tanto, puede convertir estas letras a números

$letter = 'A'; 
$number = $defects_arr($letter); 
echo $number; // outputs 1 

pero todavía parece que no es lo que desea.
¿Estos tipos de defectos tienen algún equivalente detallado? Si es así, ¿por qué no usarlos en lugar de letras?

Contar la historia completa en lugar de un poco te ayudará a evitar errores y te ahorrará un montón de tiempo, tanto los tuyos como los que responderán.

Cuestiones relacionadas