вывод букв на тональный номер - PullRequest
6 голосов
/ 03 марта 2011

Я пытался найти это в Google, но не уверен, что лучше всего искать. Я пытаюсь перевести текстовый ввод для вывода букв телефона с тональным набором. Например, Hello World будет выводить 43550 96153. Идея в том, что я пытаюсь использовать систему голосового API Tropo и хочу, чтобы пользователь мог ввести свое имя в качестве значений тонального набора и сопоставить его со своим именем в качестве чисел в моей базе данных. ,

Я предполагаю, что это можно сделать с помощью функции, аналогичной

$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

Источник: закодировать число в буквы

Ответы [ 3 ]

3 голосов
/ 03 марта 2011

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');
2 голосов
/ 03 марта 2011

Как насчет структуры, подобной этой ... ПРИМЕЧАНИЕ: Это будет игнорировать недопустимые «буквы», такие как пробелы, знаки препинания и т. Д.

LIVE DEMO 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);
    }
?>
1 голос
/ 03 марта 2011

Я не уверен, что точно понимаю, что вы спрашиваете:

  1. Вы вводите слова, и вы хотите вывести соответствующие числа?
  2. Ваш ввод - числа, и вы хотите вывести соответствующие слова?

В случае (1) все просто, просто используйте массив, который сопоставляет каждую букву алфавита с соответствующими числами (т.е. ключ - это буква, значение - это число). Затем вы можете просто перебирать символы ввода и выводить, используя соответствующий элемент в массиве.

Случай (2) немного сложнее. Вы можете создать Trie из списка имен и использовать его для поиска.

...