首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串“10”转换为整数10

将字符串“10”转换为整数10
EN

Stack Overflow用户
提问于 2010-11-15 21:55:39
回答 3查看 1.6K关注 0票数 1

可能重复: 在PHP中将单词转换为数字

是否有一个php函数将字符串(如“10”)转换为整数?

如果没有,你会怎么做呢?

已经尝试过google和php.net搜索但没有成功

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-15 23:37:27

这是一个概念类的证明我刚刚写了这样做..。看看这个:

代码语言:javascript
运行
复制
class WordToNumber {

    public $modifiers = array(
        'hundred' => 100,
    );

    public $negatives = array(
        'minus' => true,
        'negative' => true,
    );

    public $numbers = array(
        'zero'  => 0,
        'one'   => 1,
        'two'   => 2,
        'three' => 3,
        'four'  => 4,
        'five'  => 5,
        'six'   => 6,
        'seven' => 7,
        'eight' => 8,
        'nine'  => 9,
        'ten'   => 10,
        'eleven' => 11,
        'twelve' => 12,
        'thirteen' => 13,
        'fourteen' => 14,
        'fifteen'  => 15,
        'sixteen'  => 16,
        'seventeen' => 17,
        'eighteen'  => 18,
        'nineteen'  => 19,
        'twenty'    => 20,
        'thirty'    => 30,
        'forty'    => 40,
        'fifty'     => 50,
        'sixty'     => 60,
        'seventy'   => 70,
        'eighty'    => 80,
        'ninety'    => 90,    
    );

    public $powers = array(
        'thousand' => 1000,
        'million'  => 1000000,
        'billion'  => 1000000000,
    );

    public function __construct() {
    }

    public function parse($string) {
        $string = $this->prepare($string);
        $parts = preg_split('#\s+#', $string, -1, PREG_SPLIT_NO_EMPTY);
        $buffer = 0;
        $lastPower = 1;
        $powers = array(
            1 => 0,
        );
        $isNegative = false;
        foreach ($parts as $part) {
            if (isset($this->negatives[$part])) {
                $isNegative = true;
            } elseif (isset($this->numbers[$part])) {
                $buffer += $this->numbers[$part];
            } elseif (isset($this->modifiers[$part])) {
                $buffer *= $this->modifiers[$part];
            } elseif (isset($this->powers[$part])) {
                if ($buffer == 0) {
                    //Modify last power
                    $buffer = $powers[$lastPower];
                    unset($powers[$lastPower]);
                    $power = $lastPower * $this->powers[$part];
                    $powers[$power] = $buffer;
                    $lastPower = $power;
                    $buffer = 0;
                } else {
                    $powers[$this->powers[$part]] = $buffer;
                    $buffer = 0;
                    $lastPower = $this->powers[$part];
                }
            } else {
                throw new LogicException('Unknown Token Found: '.$part);
            }
        }
        if (!empty($buffer)) {
            $powers[1] = $buffer;
        }
        $total = 0;
        foreach ($powers as $power => $sub) {
            $total += $power * $sub;
        }
        if ($isNegative) {
            $total *= -1;
        }
        return $total;
    }

    protected function prepare($string) {
        $string = preg_replace('#(\s+|-|\band\b)#i', ' ', $string);
        $string = mb_convert_case($string, MB_CASE_LOWER);
        return $string;
    }

}

还有一项测试:

代码语言:javascript
运行
复制
$parser = new WordToNumber();

$strings = array(
    'one hundred and fifty two',
    'fifteen',
    'one thousand million',
    'four hundred thousand five hundred fourty three',
    'fifteen hundred',
    'one thousand twelve hundred',
    'negative two',
    'minus three hundred and fifty seven thousand four hundred and two',
);

foreach ($strings as $str) {
    echo $parser->parse($str).' - '.$str."\n";
}

其结果是:

代码语言:javascript
运行
复制
152 - one hundred and fifty two
15 - fifteen
1000000000 - one thousand million
400543 - four hundred thousand five hundred fourty three
1500 - fifteen hundred
2200 - one thousand twelve hundred
-2 - negative two
-357402 - minus three hundred and fifty seven thousand four hundred and two

它不支持庞大的数字(因此,为什么十亿是最大的力量),但它应该通过使用数学题扩展对其进行轻微的修改.如果您愿意,我可以快速地修改它以处理任意高的数字。

票数 7
EN

Stack Overflow用户

发布于 2010-11-15 22:05:15

代码语言:javascript
运行
复制
function smallTextIntToDigits($x)
{
   $lilx = lcase($x)
   $data = array('one'=>1,'two'=>2,'three'=>3,'four'=>4,'five'=>5,'six'=>6,'seven'=>7,'eight'=>8,'nine'=>9,'ten'=>10,'eleven'=>11,'twelve'=>12,'thirteen'=>13,'fourteen'=>14,'fifteen'=>15);
   if (isset($data[$lilx])) 
       return $data[$lilx];
   elseif (isset(data[lcase(str_replace('teen', '', $x))]) 
       return data[(str_replace('teen', '', lcase($x))] + 10;

   return -1; //harder stuff, recurse on big ones.  blah blah blah
}
票数 2
EN

Stack Overflow用户

发布于 2010-11-15 22:01:16

可以使用关联数组(也称为散列)来包含所期望的值。例如:

代码语言:javascript
运行
复制
$assoc_arr = array("one" => 1, "ten" => 10);
$my_ans = $assoc_arr["ten"] + 5;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4189195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档