如何在PHP中将一些字符转换为数字?

15

我需要帮助在PHP中更改一个字符。 我从网上得到了一些代码:

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

我能用这段代码将字符转换成数字吗?或者你有其他的想法吗? 我只想将结果显示为十进制数:

if null == 0
if A == 1

6
你需要哪个数字?ASCII代码? - vfn
不行,你不能使用那段代码——它不是 PHP。 - Jasper
我只需要标准数字,如0、1、2、3... - klox
“只想将结果显示为十进制数字” 是什么数字? 一个字母不是数字。您需要定义字母如何对应数字。'A' 应该对应 1 吗?您要使用 'A' 对应到 ASCII 码中的 65 吗? - deceze
1
哦,来吧,终于弄清楚了。:) a-z/A-Z(假设大小写不重要)应该转换为1-26,null/false 值转换为0。 - deceze
显示剩余2条评论
6个回答

53
使用ord()函数返回ASCII值,减去96得到一个数字,其中a=1,b=2等。
大写和小写字母具有不同的ASCII值,因此如果您想将它们处理为相同,则可以使用strtolower()将大写转换为小写。
要处理NULL情况,只需使用if($dest)。如果$dest不是NULL0,则条件成立。
PHP是一种弱类型语言,因此无需声明类型。所以char dest='a';是错误的。在PHP中,变量需要以$开头而且没有类型声明,应该是$dest = 'a';实时示例
<?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
?>

注意: 您可以在此查看ASCII值


似乎走在正确的轨道上,但不能正确处理大写字母。 - deceze
@deceze - 这是因为大写字母和小写字母具有不同的ASCII值。我编辑了答案,以使大写字母与小写字母处理方式相同。 - Peter Ajtai
如果为空怎么办?我想要如果为空等于0。 - klox
@klox - 我编辑了答案,使toNumber使用if ... else ...语句来处理NULL0的情况。您还可以使用is_null()仅检查null,但我认为在这种情况下if($dest)更好。 - Peter Ajtai
使用此答案作为我自己的不同问题的一部分的答案,该问题可在此处找到:https://dev59.com/6mEh5IYBdhLWcg3wTB72#22566639 - CrandellWS

3

确实,它的示例代码可以正常工作,但你应该使用php语法(顺便提一下:你找到的代码可能是其他语言,它并不会做同样的事情)。

因此:

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

接下来将会是这样的情况:
$out === 123

这不是反过来了吗?我希望如果为空则为零,如果我输入A,则结果为1。 - klox
@Brendan Long:我理解为他想要像0、1、2、3这样的标准数字,但正如你所说,这并不清楚。我在我的答案中添加了一个结果,以便清楚地说明它的作用。 - Jasper

2

1
所以,如果你需要 ASCII 码,你需要执行以下操作:
$dest = 'a';
$conv = ord($dest);

如果你想要类似这样的东西:

a == 1
b == 2
.
.
.

你应该做:

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

了解ASCII代码的更多信息:http://www.asciitable.com/

关于ord函数的使用,请查看:http://www.php.net/manual/en/function.ord.php


在 PHP 中,变量没有类型。应该这样写:$dest = 'a'; $conv = ord($dest); - Brendan Long
@Jasper,现在语法已经修正! - vfn
@Klox,是的,你可以使用它来获取一个十进制数。 - vfn

1

这个问题很难回答,因为它并不是一个真正的问题,只是其中的一小部分。
但如果你问的话。
看起来你需要一张翻译表,它定义了字母和数字之间的链接。

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

或者其他什么。
您可以通过使用数组来实现此目的,其中键将是这些字母,值将是所需数字。

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

因此,您可以将这些字母转换为数字

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

但似乎这仍不是你想要的。
这些缺陷类型是否有详细的等价物?如果有,为什么不使用它们而不是字母呢?

讲述整个故事而不是一点点将帮助你避免错误,并节省大量时间,无论是你自己还是那些回答问题的人。


0

如果你想把 RT0005 转成 5,请看这个问题之外的解决方案。

$max = 'RT0005';
return base_convert($max,10,10);
// return 5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接