Php 用于创建字符串组合的函数

Php 用于创建字符串组合的函数,php,function,Php,Function,我将尽我所能描述我试图实现的目标: 假设每个字母都有一个或多个替换: a = a b = X, Z c = c d = W, V, M e = e 如果给我一个字符串,比如'abcd',我想用替换的组合来创建字符串,例如'abcd'将产生以下组合: aXcW aXcV aXcM aZcW aZcV aZcM 你能帮我写一个函数,它能创建并输出所有组合的数组,而不管每个字母有多少替换,一个字符串中有多少替换?所以它应该与ab和ABBBDDD一起工作 谢谢这里有一个简单的递归解决方案 funct

我将尽我所能描述我试图实现的目标:

假设每个字母都有一个或多个替换:

a = a
b = X, Z
c = c
d = W, V, M
e = e
如果给我一个字符串,比如'abcd',我想用替换的组合来创建字符串,例如'abcd'将产生以下组合:

aXcW
aXcV
aXcM
aZcW
aZcV
aZcM
你能帮我写一个函数,它能创建并输出所有组合的数组,而不管每个字母有多少替换,一个字符串中有多少替换?所以它应该与ab和ABBBDDD一起工作


谢谢

这里有一个简单的递归解决方案

function repl($str, $map) {
    if(strlen($str) == 0)
        return array('');
    $out = array();
    foreach(repl(substr($str, 1), $map) as $r)
        foreach($map[$str[0]] as $sub)
            $out[] = $sub . $r;
    return $out;
}
像这样使用

$map = array(
    'a' => array('1', '2', '3'),
    'b' => array('@', '*'),
    'c' => array('X', 'Y', 'Z')
);

$result = repl("abc", $map);
preg_match_all('~.~u', $str, $m);
$chars = $m[0];
$result = repl($chars, $map);
要处理utf8字符串(或任意子字符串),函数应接受字符串数组:

function repl($chars, $map) {
    if(count($chars) == 0)
        return array('');
    $out = array();
    foreach(repl(array_slice($chars, 1), $map) as $r)
        foreach($map[$chars[0]] as $sub)
            $out[] = $sub . $r;
    return $out;
}
像这样使用

$map = array(
    'a' => array('1', '2', '3'),
    'b' => array('@', '*'),
    'c' => array('X', 'Y', 'Z')
);

$result = repl("abc", $map);
preg_match_all('~.~u', $str, $m);
$chars = $m[0];
$result = repl($chars, $map);

@奥利·查尔斯沃思(Oli Charlesworth)在这一点上什么都没有,他在想。听起来像是通用图灵机器的东西(参见)。考虑查看数组_map()?您只需编写一个一次只能使用一个字母及其替换集的函数,然后将其与array_map()连接起来,这将允许您在字符串中所有字符的数组(可以在字符串中使用str_split()获得)上运行它。太棒了,非常感谢。现在,我尝试使用utf8字符作为$map键