我遇到了一个问题,我需要导入一个数据Feed,因为某些原因,Feed生产商已经决定提供明确为INT
或FLOAT
字符串的数据 - 就像这样:
$CASES_SOLD = "THREE";
$CASES_STOCKED = "FOUR";
PHP中有没有办法将文本字符串解释为实际的整数?
编辑:我应该更清楚 - 我需要将$cases_sold
等作为整数 - 所以我可以将它们作为数字操作,作为INT存储在数据库中等。
答案 0 :(得分:3)
使用关联数组,例如:
$map = array("ONE" => 1, "TWO" => 2, "THREE" => 3, "FOUR" => 4);
$CASES_SOLD = $map["THREE"]; // 3
答案 1 :(得分:1)
你需要一个英文数字列表然后替换为字符串,但是,你应该玩'千'和'百万'子句,必须检查字符串'thousend-three'之后是否从字符串中删除整数。
您应该使用此功能并尝试更改if-else并添加一些功能以实现良好的转换:
我现在正在编写一个简单的基本代码,但你知道别人应该改变什么,玩吧!
看看百万,千和字符串AND,如果没有像'1345'这样的字符串,则应该更改。然后分别用str_replace
替换它们并将它们连接成整数。
function conv($string)
{
$conv = 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,
'SIXTEEN' => 16,
'SEVENTEEN' => 17,
'EIGHTEEN' => 18,
'NINETEEN' => 19,
'TWENTY' => 20,
'THIRTY' => 30,
'FORTY' => 40,
'FIFTY' => 50,
'SIXTY' => 60,
'SEVENTY' => 70,
'EIGTHY' => 80,
'NINETY' => 90,
'HUNDRED' => 00,
'AND' => '',
'THOUSAND' => 000
'MILLION' => 000000,
);
if (stristr('-', $string))
{
$val = explode('-', $string);
#hardcode some programming logic for checkers if thousands, should if trim zero or not, check if another values
foreach ($conv as $conv_k => $conv_v)
{
$string[] = str_replace($conv_k, $conv_v, $string);
}
return join($string);
}
else
{
foreach ($conv as $conv_k => $conv_v)
{
$string[] = str_replace($conv_k, $conv_v, $string);
}
return join($string);
}
}
答案 2 :(得分:1)
如果您只对“转换”1到9感兴趣,可以使用以下代码:
$convert = array('one' => 1,
'two' => 2,
'three' => 3,
'four' => 4,
'five' => 5,
'six' => 6,
'seven' => 7,
'eight' => 8,
'nine' => 9
);
echo $convert[strtolower($CASES_SOLD)]; // will display 3
答案 3 :(得分:1)
如果您只需要基数为10的数字,只需制作地图
$numberMap = array(
'ONE' => 1
, 'TWO' => 2
, 'THREE' => 3
// etc..
);
$number = $numberMap[$CASES_SOLD];
// $number == 3'
如果您需要更复杂的内容,例如将四千二百五十八解释为 4258 ,那么您需要卷起袖子看看{{ 3}}
答案 4 :(得分:1)
通过以完全钝的方式处理这个问题来打动你的程序员:
<?php
$text = 'four';
if(ereg("[[.$text.]]", "0123456789", $m)) {
$value = (int) $m[0];
echo $value;
}
?>
答案 5 :(得分:0)
这类似于Converting words to numbers in PHP PHP没有内置的转换功能。您必须根据switch语句或其他方式构建自己的逻辑。
或者使用现有的库,例如: http://www.phpclasses.org/package/7082-PHP-Convert-a-string-of-English-words-to-numbers.html
答案 6 :(得分:0)
基本上你想要的是为表示书面数字的正式语法编写一个解析器(直到一些有限的上限)。根据您需要的高度,解析器可能与
一样简单$numbers = ('zero', 'one', 'two', 'three');
$input = 'TWO';
$result = array_search(strtolower($input), $numbers);
...或作为ANTLR工具生成的完整解析器。由于您可能只需要处理相对较小的数字,因此最实用的解决方案可能是手动编写小型解析器。您可以查看现成的语法here并在PHP中实现它。