Php 如何将用文字书写的年份值转换为数字,即1952=1952

Php 如何将用文字书写的年份值转换为数字,即1952=1952,php,Php,听我想转换成数字的单词作为年份 two zero one seven => 2017 two not one seven => 2017 two k seventeen => 2017 twenty seventeen => 2017 two th

听我想转换成数字的单词作为年份

two zero one seven                            => 2017
two not one seven                             => 2017
two k seventeen                               => 2017
twenty seventeen                              => 2017
two thousand and seventeen                    => 2017
two thousand seventeen                        => 2017
twenty hundred and seventeen                  => 2017
nineteen fifty two                            => 1952
nineteen hundred fifty two                    => 1952
one thousand nine hundred and fifty two       => 1952
nineteen hundred                              => 1900
one thousand twelve hundred                   => 2200
nineteen                                      => 19
公共函数解析($string){
$string=$this->prepare($string);
$parts=preg_split('#\s+#',$string,-1,preg_split_NO#u为空);
$buffer=0;
$lastPower=1;
$powers=数组(
1 => 0,
);
$isNegative=false;
/*回声“;
印刷品(零件)*/
foreach($parts作为$part){
if(设置($this->negatives[$part])){
$isNegative=true;
}elseif(isset($this->number[$part])){
$buffer.=$this->number[$part];
}elseif(isset($this->special[$part])){
$buffer+=$this->special[$part];
}elseif(isset($this->tens[$part])){
$buffer+=$this->tens[$part];
}elseif(isset($this->modifiers[$part])){
$buffer*=$this->modifiers[$part];
}elseif(isset($this->powers[$part])){
如果($buffer==0){
//修改上次电源
$buffer=$powers[$lastPower];
未设置($powers[$lastPower]);
$power=$lastPower*$this->powers[$part];
$powers[$power]=$buffer;
$lastPower=$power;
$buffer=0;
}否则{
$powers[$this->powers[$part]]=$buffer;
$buffer=0;
$lastPower=$this->powers[$part];
}
}否则{
抛出新的LogicException('找到未知标记:'。$part);
}
}
//检查缓冲区是否为空
如果(!空($buffer)){
$powers[1]=$buffer;
}
$total=0;
foreach($powers as$power=>$sub){
$total+=$power*$sub;
}
如果($isNegative){
$total*=-1;
}
返回$total;
}

您尝试过什么吗?是的,但它不允许我将代码粘贴到这里,因为它是库文件的可能副本我也使用过相同的文件,但它不起作用是某些情况下,如果我们使用九十五或九十五十二或二而不是像那样的十七,我希望它能够将所有类型的单词序列转换成适当的数字,因为扩展函数没有错
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;
    /*echo "<pre>";
    print_r($parts);*/
    foreach ($parts as $part) { 
        if (isset($this->negatives[$part])) {
            $isNegative = true;
        } elseif (isset($this->numbers[$part])) {
            $buffer .= $this->numbers[$part];
        } elseif (isset($this->special[$part])) {
            $buffer += $this->special[$part];
        } elseif (isset($this->tens[$part])) {
            $buffer += $this->tens[$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);
        }
    }
    //checking if buffer not empty
    if (!empty($buffer)) {
        $powers[1] = $buffer;
    }
    $total = 0;
    foreach ($powers as $power => $sub) {
        $total += $power * $sub;
    }
    if ($isNegative) {
        $total *= -1;
    }
    return $total;
}