1

我遇到了需要导入的数据提要的问题,由于某种原因,提要生产者决定提供显然应该是字符串INTFLOAT字符串的数据,例如:

$CASES_SOLD = "THREE";
$CASES_STOCKED = "FOUR";

PHP中有没有办法将文本字符串解释为实际的整数?

编辑:我应该更清楚——我需要将$cases_sold等作为整数——这样我就可以将它们作为数字进行操作,将它们作为 INT 存储在数据库中,等等。

4

7 回答 7

3

使用关联数组,例如:

  $map = array("ONE" => 1, "TWO" => 2, "THREE" => 3, "FOUR" => 4);
  $CASES_SOLD = $map["THREE"]; // 3
于 2012-08-28T22:41:33.463 回答
1

您需要一个英文数字列表,然后替换为字符串,但是,您应该使用 'thousand' 和 'million' 子句,其中必须检查字符串 '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);
    }
}
于 2012-08-28T22:37:40.607 回答
1

如果您只对“转换”一到九感兴趣,您可以使用以下代码:

$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
于 2012-08-28T22:42:57.503 回答
1

如果您只需要以 10 为底的数字,只需制作一张地图

$numberMap = array(
    'ONE'   => 1
  , 'TWO'   => 2
  , 'THREE' => 3
  // etc..
);

$number = $numberMap[$CASES_SOLD];
// $number == 3'

如果您需要更复杂的东西,例如将四千二百五十八解释为4258,那么您需要卷起袖子看看这个相关的问题

于 2012-08-28T22:47:37.000 回答
1

用一种完全迟钝的方式处理这个问题,给你的程序员同事留下深刻印象:

<?php

$text = 'four';

if(ereg("[[.$text.]]", "0123456789", $m)) {
    $value = (int) $m[0];
    echo $value;
}

?>
于 2012-08-28T23:13:24.123 回答
0

这类似于在 PHP 中将单词转换为数字 PHP 没有内置的转换功能。您必须基于 switch 语句或其他方式构建自己的逻辑。

或使用现有的库,如: http ://www.phpclasses.org/package/7082-PHP-Convert-a-string-of-English-words-to-numbers.html

于 2012-08-28T22:40:50.777 回答
0

基本上你想要的是为表示书面数字的形式语法编写一个解析器(直到某个有限的上限)。根据您需要走多高,解析器可能像

$numbers = ('zero', 'one', 'two', 'three');
$input = 'TWO';
$result = array_search(strtolower($input), $numbers);

...或者像 ANTLR 这样的工具生成的完整解析器。由于您可能只需要处理相对较小的数字,因此最实用的解决方案可能是手动手动编写一个小型解析器。您可以在这里查看现成的语法并在 PHP 中实现它。

于 2012-08-28T22:43:51.603 回答