微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-如何根据字母变化数组获取所有相似的字符串

我一直在努力解决这个问题,但是我实际上是在尝试根据字母变化数组来生成给定字符串所有变化的数组/列表.

我有字符串“ fabien”,并且涉及到的每个字母都有一系列变体.例如,A可替换为4,i可替换为1和l.因此,鉴于信息,我如何生成“ fabien”的每个变体的列表.

$variants = array();
$variants['a'] = array('4');
$variants['i'] = array('1', 'l');

$string = 'fabien';

$result = getvariants('fabien', $variants);

print_r($results);

// Sample output:
Array ([0] => fabien [1] => f4bien [2] => fab1en [3] => fablen [4] => f4b1en [5] => f4blen)

解决方法:

您的案例可以通过递归轻松实现.就像:

function getvariants($string, $variants)
{
    //here's about stripping 1 symbol from string's right, so 
    //may be you'll prefer to work with string functions:
    $string  = is_array($string)?$string:str_split($string);
    $symbol  = array_pop($string);
    $variant = array_key_exists($symbol, $variants)?
               array_merge([$symbol], $variants[$symbol]):
               [$symbol];
    $result  = [];
    if(!count($string))
    {
        return $variant;
    }
    foreach(getvariants($string, $variants) as $piece)
    {
        foreach($variant as $char)
        {
            $result[] = $piece.$char;
        }
    }
    return $result;
}

-请参阅fiddle演示.怎么运作的?答案是:长度为N的字符串的变化是其右符号的变体,即没有该符号的部分的变化(即长度为N-1)“相乘”. “乘”是指两部分的Decart乘积,然后是成对的两个部分的串联.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐