Как доставление замены из-за пар в числе 4 цифр без повторений

Мне хотелось бы знать, как делать, чтобы получать серию замен на основании числа в специфическом средстве в группах 2 и без повторений.

Например: У меня есть число: 1245

Мне хотелось бы, что он показал мне все комбинации следующего способа:

- 1245 - 2145 - 4521 - 5421

В настоящее время у меня есть это, что я функционирует совершенно, когда 4 числа отличные

$numero = $_GET[numero];

$numero1 = substr($numero,0,1);
$numero2 = substr($numero,1,1);
$numero3 = substr($numero,2,1);
$numero4 = substr($numero,3,1);

echo $numero1.$numero2.$numero3.$numero4.'<br>';
echo $numero1.$numero2.$numero4.$numero3.'<br>';
echo $numero2.$numero1.$numero3.$numero4.'<br>';
echo $numero2.$numero1.$numero4.$numero3.'<br>';

Например: Если я размещаю номер 1221, он показывает мне следующее:

- 1221 - 1212 - 2121 - 2112

Те, которые находятся в полужирных шрифтах, - практически та же комбинация, и это - то, что я хочу предотвратить.

Спасибо за Ваше внимание.

0
задан 18.03.2019, 22:33
1 ответ

ты можешь делать что-то как это:

  <?php

// declaramos la funcion y recibimos el string
function permutas($string,$perm=false){

    // declaramos "$result" que almacenara nuestro resultados y agregamos como primer valor el recibido!
    $result = array($string);
    // creamos una variable temporal que contendra nuestro string como arreglo!
    $temp = str_split($string);

    //validamos que se quieran permutas
    if ($perm) {
        $par1 =  substr($string,0,$perm);
        $par2 =  substr($string,$perm);
    }

    // hacemo un loop 
    for ($i=0; $i < (count($temp)**count($temp)); $i++) {
        // shuffle ordenara nuestro arreglo de forma aleatoria
        shuffle($temp);

        // que se envien permutas
        if ($perm) {
            // validamos que se encuentre el numero con su par
            if ( preg_match("/\d?(".$par1.")$/",join($temp)) || preg_match("/\d?(".$par2.")$/",join($temp)) ) {
                // validamos que el nuevo arreglo aleatorio no exista en los resultado
                if (!in_array(join($temp),$result)) {
                // agregamos el nuevo arreglo a resultado
                    $result[] = join($temp);
                }
            }
        }else{
            if (!in_array(join($temp),$result)) {
                // agregamos el nuevo arreglo a resultado
                $result[] = join($temp);
            }
        }

    }
    // retornamos el resultado pasado por array_unique que nos devolvera el arreglo sin elementos repetidos!
    return array_unique($result);



}

$intro = 1245;

$p1 = permutas($intro,2);
echo "<pre>posibles combinaciones con pares de 2: ".count($p1)."<br>";
print_r($p1);

$p2 = permutas($intro);
echo "<hr><br>posibles combinaciones sin pares: ".count($p1)."<br>";
print_r($p2);

?>
0
ответ дан 02.12.2019, 05:28