是否有一个PHP函数的字符串,如 '十' 转换为整数?
如果没有,那么你会怎么做呢?
已尝试谷歌和php.net搜索没有成功
1
A
回答
6
这里是概念类的证明,我刚写做到这一点...检查出来:
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;
}
}
和测试:
$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";
}
结果:
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
它不支持大数字(因此为什么十亿是最大的功率),但它应该进行简单修改,以支持他们通过使用bcmath扩展...如果你想,我可以快速修改它以处理数字尽可能高。
1
您可以使用关联数组(即哈希)来包含您所期望的值。例如:
$assoc_arr = array("one" => 1, "ten" => 10);
$my_ans = $assoc_arr["ten"] + 5;
+0
这将是最好的一个简单的解决方案,即如果你只必须转换一些价值观。如果你想将任意字符串转换为数字,你必须从定义语法开始。 – user318904 2010-11-15 22:03:30
+0
没错,但不清楚答案的复杂程度。 – GreenMatt 2010-11-15 22:23:20
2
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
}
相关问题
- 1. 将10位数字转换为十六进制字符串
- 2. 转换4字节十六进制字符串为整数
- 3. 将字符串转换为整数
- 4. 将字符串转换为整数?
- 5. 将整数十六进制格式转换为字符串
- 6. 将十六进制字符串转换为整数
- 7. 将特定的字符串/整数转换为十进制
- 8. 十六进制字符串转换为整数在C
- 9. 字符串转换为十六进制整数用C
- 10. 将整数转换为十六进制字符串
- 11. 在JavaScript中将整数转换为十六进制字符串
- 12. 在Groovy中将整数转换为十六进制字符串
- 13. SQL:将整数转换为十六进制字符串?
- 14. 将十六进制字符串转换为整数
- 15. 在Ruby中将整数转换为十六进制字符串
- 16. 将十六进制字符串转换为整数
- 17. 转换十进制到一般的整数作为字符串
- 18. C++如何将十六进制整数转换为字符串?
- 19. 将十六进制字符串转换为整数
- 20. 如何将十六进制整数转换为字符串
- 21. 将字符串转换为Python中的十进制整数
- 22. 如何将'整数'字符串转换为'十六进制'字符串C
- 23. 将字符串转换为Java中的10位整数
- 24. 转换字符串数组为整数
- 25. 如何将表示为十进制字符串的64位整数转换为十六进制字符串
- 26. 十进制数字符串转换为十六进制的字符串
- 27. 将字符串转换为整数
- 28. 整数转换为字符串?
- 29. Swift:将字符串转换为整数
- 30. 将字符串转换为整数
可能的重复[在PHP中将单词转换为数字](http://stackoverflow.com/questions/1077600/converting-words-to-numbers-in-php) - 这里有两个很好的参考。第一个是你自己实现一个算法,另一个是预先构建的工具... – ircmaxell 2010-11-15 21:59:39
我实际上认为php有一个函数用于将字符串转换为数字,因为它是一种非常强大的语言。如果没有内置函数,那么我认为这不值得。 – andrew 2010-11-15 22:24:21
你在想Python。 – outis 2010-11-15 22:40:10