字母到触摸音号输出

时间:2011-03-02 21:27:47

标签: php class function tropo

我尝试使用谷歌搜索,但不确定什么是最好的选择。我想要做的是翻译文本输入以输出按键式电话的字母。例如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

来源:code a number into letters

3 个答案:

答案 0 :(得分:3)

PHP提供了一个名为strtr的函数,它可以进行字符串转换。第一个参数是你要翻译的内容,第二个是原始字符,第三个是替换字符。下面是一个应该做你想要的功能。 修改:更新了我的示例,以删除任何不受支持的字符(除了a-z或空格以外的其他字符)

<?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');

答案 1 :(得分: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);
    }
?>

答案 2 :(得分:1)

我不确定我到底知道你在问什么:

  1. 您的输入是单词,并且您想输出相应的数字?
  2. 您输入的是数字,是否要输出相应的字词?
  3. 在情况(1)中,它很简单,只需使用将字母表中的每个字母映射到相应数字的数组(即键是字母,值是数字)。然后,您可以迭代输入的字符,并使用数组中的相应元素进行输出。

    案例(2)有点棘手。您可以从名称列表中构建Trie,并使用它来进行查找。