代码之家  ›  专栏  ›  技术社区  ›  BrightVision

使用Trie实现PHP T9字典〔closed〕

  •  -1
  • BrightVision  · 技术社区  · 11 年前

    我希望在PHP中简化T9输入法的实现,即使用Trie或任何其他简单和最佳的解决方案。

    我们将非常感谢您的帮助。

    1 回复  |  直到 11 年前
        1
  •  -1
  •   Abbasi    11 年前

    它可能效率不高,可能有更好的解决方案来解决您的问题,它也有一些限制,例如,如果您输入的数字超过15位,它可能无法正常工作。但我只是试图分享我的想法,而不使用Tries,它可能会给你一些想法。试着分享你的经验。

    <?php
    
    $T9Array = array(
        2 => array('a', 'b', 'c'),
        3 => array('d', 'e', 'f'),
        4 => array('g', 'h', 'i'),
        5 => array('j', 'k', 'l'),
        6 => array('m', 'n', 'o'),
        7 => array('p', 'q', 'r', 's'),
        8 => array('t', 'u', 'v'),
        9 => array('w', 'x', 'y', 'z')
    );
    
    function search_combination($input)
    {
        global $T9Array;
        if (! is_numeric($input))
            return false;
        $arr = str_split($input);
        $total = 1;
        for($a = count($arr) - 1; $a >= 0; $a--)
        {
            $total *= count($T9Array[$arr[$a]]);
            $t[$a] = $total;
        }
        sort($t);
        for ($b = 0; $b < count($arr); $b++)
        {
            $k = $l = 0;
            $j = count($arr) - ($b + 2);
            for ($c = 0; $c < $total; $c++)
            {
                $ret[$c] .= $T9Array[$arr[$b]][$l];
                if ($j >= 0 && $c == ($t[$j] * ($k+1)) - 1 || $j < 0)
                {
                    $k++;
                    if ($l < count($T9Array[$arr[$b]]) - 1)
                        $l++;
                    else
                        $l = 0;
                }
            }
        }
        return $ret;
    }
    
    function search_combination_str($string)
    {
        global $T9Array;
        if (empty($string))
            return false;
        $arr = str_split(strtolower($string));
        foreach ($arr as $a)
        {
            foreach ($T9Array as $key => $val)
            {
                $tmp = array_keys($val, $a);
                if ($tmp)
                    $conv .= $key;
            }
        }
        return search_combination($conv);
    }
    
    ?>
    
    推荐文章