PHP - 如何从字符串创建所有可能性

时间:2017-03-02 03:14:43

标签: php

这里有一个示例字符串" XjYAKpR" ..如何使用该字符串创建所有新的字符串可能性??

我之前已经尝试过了

function containAllRots($s, $arr) {
$n = strlen($s);
$a = array();
for ($i = 0; $i < $n ; $i++) { 
    $rotated = rotate(str_split($s), $i);
    $a[] = $rotated;        
}
print_r($a);die();
if (array_diff($arr, $a)) {
    return True;
}
else
{
    return False;
} 
}

我使2函数旋转并生成

    function rotate($l, $n) {   
    $b = $l[$n];
    $sisa = array_values(array_diff($l, array($b)));
    for ($i = 0; $i < count($sisa) ; $i++) { 
        $random[] = generate($sisa, $b);
    }    
    print_r($random);die();
    $hasil = $l[$n] . implode("",$random);  
    return $hasil;
}

function generate($sisa, $b) {
    $string = implode("",$sisa);
    $length = count($sisa);    
    $size = strlen($string);
    $str = '';
    for( $i = 0; $i < $length; $i++ ) {
        $str .= $string[ rand( 0, $size - 1 ) ];
    }

1 个答案:

答案 0 :(得分:1)

这里有一对函数可以让你计算一个置换集 (不考虑重复)

function extends_permutation($char, $perm) {
    $result = [];
    $times = count($perm);
    for ($i=0; $i<$times; $i++) {
        $temp = $perm;
        array_splice($temp, $i, 0, $char);
        array_push($result, $temp);

    }
    array_push($result, array_merge($perm, [$char]));
    return $result;
}

function extends_set_of_permutations($char, $set) {
    $step = [];
    foreach ($set as $perm) {
        $step = array_merge($step, extends_permutation($char, $perm));
    }
    return $step;
}

您可以使用它们来生成所需的排列集。像这样:

$seed = "XjYAKpR";
// the first set of permutations contains only the
// possible permutation of a one char string (1)
$result_set = [[$seed[0]]];

$rest = str_split(substr($seed,1));

foreach($rest as $char) {
  $result_set = extends_set_of_permutations($char, $result_set);
}

$result_set = array_map('implode', $result_set);
sort($result_set);

在执行结束时,您将在result_set数组中生成由字符串生成的5040个排列(按字母顺序排序)。

添加一个字符,您将获得超过40000个结果。

这些功能在实现和命名方面都很天真,两方面都可以改进。