6

私はこれをグーグルで試しましたが、何を探すのが最善かわかりません。私がやろうとしているのは、テキスト入力を変換して、プッシュホンの文字を出力することです。たとえば、私はtropo voice apiシステムを使用しようとしていて、ユーザーが自分の名前をタッチトーン値として入力し、それをデータベース内の数字として自分の名前と一致させたいという考えHello Worldを出力します。43550 96153

これは、次のような関数で実行できると思います。

$input= $touchtone_value;  
$number_two_array (a,b,c);  
if( $input==in_array($number_two_array)){ 
        $output = '2';
}

これでうまくいくと確信しています。ただし、クラスがある場合、または各文字を数値配列に分割するよりも単純な関数がある場合は、それがより良い方法だと思います。この時点では、これを達成するための最良の方法としてどこから始めればよいかというアイデアがないため、これはかなり自由形式の質問です。

編集:私は解決策を見つけました、それが最良のものであるかどうかはわかりません。

            $input = strtolower('HELLO WORLD');
            echo  'input: '. $input. "\n";
            echo $output = 'output: '.  strtr($input,'abcdefghijklmnopqrstuvwxyz', '22233344455566677778889999'); 

input:hello world 
output: 43556 96753

今、私は空白を削除する方法を見つける必要があります:) http://codepad.org/Ieug0Zuw

ソース:数字を文字にコード化する

4

3 に答える 3

3

PHPは、strtr文字列変換を行うと呼ばれる関数を提供します。最初の引数は翻訳したいもの、2番目は元の文字、3番目は置換文字です。以下はあなたが望むことをするべき関数です。編集:サポートされていない文字(azまたはスペース以外)を削除するようにサンプルを更新しました

<?php

function get_tones($inp) {
    $from = 'abcdefghijklmnopqrstuvwxyz ';
    $to = '222333444555666777788899990';

    // convert the input to lower case
    $inp = strtolower($inp);

    // remove anything that isn't a letter or a space
    $inp = preg_replace('/[^a-z ]/', '', $inp);

    return strtr($inp, $from, $to);
}

assert(get_tones('Hello world') == '43556096753');
assert(get_tones('Hell234"*&o world') == '43556096753');
assert(get_tones('ALEX') == '2539');
assert(get_tones('    ') == '0000');
于 2011-03-02T22:02:29.407 に答える
2

このような構造はどうですか...注:これは、スペースや句読点などの無効な「文字」を無視します。

ライブデモ http://codepad.org/pQHGhm7Y

<?php
    echo getNumbersFromText('Hello There').'<br />';
    echo getNumbersFromText('This is a really long text string').'<br />';

    function getNumbersFromText($inp){
        $result=array();
        $inp = strtolower($inp);
        $keypad = array('a' => '2', 'b' => '2', 'c' => '2', 'd' => '3',
            'e' => '3', 'f' => '3', 'g' => '4', 'h' => '4',
            'i' => '4', 'j' => '5', 'k' => '5', 'l' => '5',
            'm' => '6', 'n' => '6', 'o' => '6', 'p' => '7',
            'q' => '7', 'r' => '7', 's' => '7', 't' => '8',
            'u' => '8', 'v' => '8', 'w' => '9', 'x' => '9',
            'y' => '9', 'z' => '9');

        for ($x=0; $x<strlen($inp); $x++){
            $letter = $inp[$x];
            if ($keypad[$letter]) $result[]= $keypad[$letter];
        }
        return implode('',$result);
    }
?>
于 2011-03-02T21:47:29.940 に答える
1

あなたが何を求めているのか正確に理解できません。

  1. 入力は単語で、対応する数字を出力しますか?
  2. 入力は数字で、対応する単語を出力しますか?

(1)の場合、それは単純です。アルファベットの各文字を対応する数字にマップする配列を使用するだけです(つまり、キーは文字、値は数字)。次に、入力の文字を繰り返し処理し、配列内の対応する要素を使用して出力することができます。

ケース(2)は少し注意が必要です。名前のリストからTrieを作成し、それを使用してルックアップを行うことができます。

于 2011-03-02T21:39:39.097 に答える