6

我试过用谷歌搜索,但不确定什么是最好的寻找。我要做的是翻译文本输入以输出按键式电话的字母。例如Hello World,输出43550 96153的想法是我正在尝试使用 tropo 语音 api 系统,并希望用户能够输入他们的姓名作为按键音值,并将其与他们的姓名匹配为我的数据库中的数字。

我假设这可以通过以下函数来完成

$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字符串翻译的函数。第一个参数是你要翻译的内容,第二个是原始字符,第三个是替换字符。下面是一个应该做你想做的功能。编辑:更新了我的示例以去除任何不受支持的字符(除 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 回答