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;
}