Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 字母到按键数字输出_Php_Class_Function_Tropo - Fatal编程技术网

Php 字母到按键数字输出

Php 字母到按键数字输出,php,class,function,tropo,Php,Class,Function,Tropo,我试着用谷歌搜索这个,但不确定什么是最好的。我想做的是翻译一个文本输入,输出按键电话的字母。例如,Hello World将输出43550 96153我的想法是尝试使用tropo voice api系统,希望用户能够输入他们的姓名作为按键音值,并将其与我的数据库中的姓名作为数字进行匹配 我假设这可以通过一个函数来实现 $input= $touchtone_value; $number_two_array (a,b,c); if( $input==in_array($number_two_a

我试着用谷歌搜索这个,但不确定什么是最好的。我想做的是翻译一个文本输入,输出按键电话的字母。例如,
Hello World
将输出
43550 96153
我的想法是尝试使用tropo voice 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
现在我只需要找到一种删除空白的方法:)


来源:

我不确定我是否完全理解你的问题:

  • 您的输入是单词,您想输出相应的数字吗
  • 您的输入是数字,您想输出相应的单词吗
  • 在案例(1)中,很简单,只需使用一个数组,将字母表中的每个字母映射到相应的数字(即键是字母,值是数字)。然后,您只需迭代输入的字符,然后使用数组中相应的元素输出


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

    像这样的结构如何。。。注意:这将忽略无效的“字母”,如空格、标点符号等

    现场演示


    PHP提供了一个名为的函数,用于进行字符串翻译。第一个参数是您要翻译的内容,第二个是原始字符,第三个是替换字符。下面是一个函数,它可以实现您想要的功能编辑:更新了我的示例,删除了所有不受支持的字符(a-z或空格以外的任何字符)


    谢谢,这会比我在上面找到的解决方案更快吗?看起来可能需要更多的工作,但我不知道有多少资源
    strtr
    使用这两种方法基本上完成了相同的任务。在您的示例中,您正在创建两个具有相应索引的数组(一个用于数字,一个用于字母)。在我的方法中,我创建了一个数组,其中
    是字母,
    是字母。老实说,我的方法可能会快一点,因为我是按索引调用数组项的,我不需要搜索数组,因为
    strtr()
    函数可能会这样做。@Dutchie432感谢您的解释。我喜欢你的另一件事是,它消除了所有无效字符,这总是一个加号。:)谢谢@Dutchie432:我做了一个简单的基准测试(这很可能是错误的),针对4个字符串测试您的解决方案和
    strtr
    方法,每个字符串测试10000次,看起来您的解决方案比
    strtr
    方法慢一个数量级。请参阅:关于基准测试的注意事项:这些函数非常简单,两种实现都足够好。
    strtr
    的好处在于它更易于阅读和理解。谢谢,请参见上文。在您发布以下内容之前,我更新了问题以包含此示例:P@BandonRandon:是的,我在发布后注意到了这一点。实际上,我有一个解决方案使用数组,就像另一个答案一样,但我意识到
    strtr
    更小、更干净、可读性更强,任何性能差异都可以忽略不计。剥离空间的最佳方法是什么?我知道我可以删除字符串末尾的空格和0,但是没有一个简单的正则表达式可以在
    preg\u replace
    中使用吗?对不起,我觉得很愚蠢,如果我使用
    /[^a-z]/
    的话,我现在没有看到
    /[^a-z]/
    末尾的空格。问题解决了:)
    <?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);
        }
    ?>
    
    <?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');