Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如何从字符串创建所有可能性_Php - Fatal编程技术网

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

PHP-如何从字符串创建所有可能性,php,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 (arra

这里有一个示例字符串“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;
} 
}
函数包含所有rot($s,$arr){
$n=strlen($s);
$a=数组();
对于($i=0;$i<$n;$i++){
$rotated=旋转(str_split($s),$i);
$a[]=$旋转;
}
打印($a);模具();
if(数组_diff($arr,$a)){
返回True;
}
其他的
{
返回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 ) ];
    }
函数旋转($l,$n){
$b=$l[$n];
$sisa=数组值(数组差异($l,数组($b));
对于($i=0;$i
这里有一对函数,可用于计算置换集 (不考虑重复)

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

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


函数在实现和命名方面都非常简单,这两个方面都可以改进。

您向我们展示的代码没有生成字符串的所有排列,请检查数组是否包含给定字符串的所有排列。排列必须在目标数组中按精确顺序排列,否则测试将失败。作为第一个选项,我将在扩散之前对阵列进行排序。谢谢,太棒了!
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);