1

インポートする必要があるデータ フィードで問題が発生しました。何らかの理由で、フィード プロデューサーが明らかにINTまたはFLOAT文字列としてデータを提供することを決定した場合、次のようになります。

$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

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 に答える
1

英語の数字のリストが必要で、文字列に置き換えますが、文字列 'thousend-three' の後かどうかを確認し、文字列から整数を削除する必要がある 'thousand' および 'million' 句を使用する必要があります。

この関数を試して、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

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
于 2012-08-28T22:42:57.503 に答える
0

基本的にあなたが望むのは、書かれた数を表す形式文法のためのパーサーを書くことです(ある有限の上限まで)。あなたが行く必要がある高さに応じて、パーサーは同じくらい些細なことかもしれません

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

...またはANTLRのようなツールによって生成された本格的なパーサーのように関与します。おそらく比較的少数の数しか処理する必要がないため、最も実用的な解決策は、小さなパーサーを手動で手動でコーディングすることです。ここで既製の文法を見て、PHPで実装することができます。

于 2012-08-28T22:43:51.603 に答える
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 に答える