Php 生成包含所有字符排列的字符串,并设置位数

Php 生成包含所有字符排列的字符串,并设置位数,php,permutation,Php,Permutation,我想生成一个字符串,它将生成一组字符的所有排列 然而,我不想任何数字重复3次,(只有两次),我想做得更有效。。。我在下面解决了它,但我知道它可以更有效。。。它现在有285个字符长 <?php function arrayToString(&$array, $string) { //var_dump( $array); //var_dump( $string); $res = ""; for ($i = 0; $i < count($arr

我想生成一个字符串,它将生成一组字符的所有排列

然而,我不想任何数字重复3次,(只有两次),我想做得更有效。。。我在下面解决了它,但我知道它可以更有效。。。它现在有285个字符长

<?php



function arrayToString(&$array, $string)
{
    //var_dump( $array);
    //var_dump( $string);
    $res = "";
    for ($i = 0; $i < count($array) - 1; $i++)
    {
        //echo "i = $i<br />";
        //echo "array[i] = {$array[$i]}<br /><br />";
        $res .= $string[$array[$i]];
    }
    return $res;

}

function incrementArray(&$array, $max)
{
    $index = count($array) - 1;
    return addOneToArray($array, $index, $max);
}

function addOneToArray(&$array, $index, $max)
{
    if ($index < 0 )
        return 0;

    if ($array[$index] == $max - 1)
    {
        $array[$index] = 0;
        return addOneToArray($array, $index - 1, $max);
    }

    $array[$index] += 1;
    return 1;
}


function getPermutations ($source)
{
    $len = count($source);
    $resString = "";
    $array = [0,0,0,0,0];

    $i = 1;
    while ($i > 0)
    {
        $testString = arrayToString($array, $source);
        // echo "test string ". $testString;

        if ( strpos($resString, $testString) === false)
            $resString .= $testString;

        $i = incrementArray($array, count($source));

    }
    return $resString;

}

$source = ["3", "5", "7", "9"];

echo getPermutations($source);
// $resString;

我不知道你期望的结果是什么。只是一个没有3个重复整数的随机数?我期望333333533373339335333553357335933733337533773379等…我不知道你期望的结果是什么。只是一个没有3个重复整数的随机数?我期待着3333335373339335333553357335933733337533773379等等。。。