как сделать комбинацию массива с уникальным значением и ограниченным символом? - PullRequest
0 голосов
/ 27 мая 2020

у меня есть такой массив ['1', '2', '3', '4']; Я хочу получить результат такого массива

['123', '124', '132', '134', '142', '143', '213' ,' 214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '423']

это мой код

<?php 
ini_set('memory_limit', '-1');

function permute($arg) {
    $array = is_string($arg) ? str_split($arg) : $arg;
    if(1 === count($array))
        return $array;
    $result = array();
    foreach($array as $key => $item)
        foreach(permute(array_diff_key($array, array($key => $item))) as $p)
            $result[] = $item . $p;
    return $result;
}
$array = array('1','2','3','4');
var_dump(permute($array));
 ?>

результат моего кода:

['1234', '1243', '1324', '1342', '1423', '1432', '2134', '2314', '2413' ......... ]

Я хочу ограничить символ результата всего 3 символами. как это сделать?

1 Ответ

1 голос
/ 27 мая 2020
<?php
function combination($chars, $size, $combinations = array()) {

    if (empty($combinations)) {
        $combinations = $chars;
    }

    # we're done if we're at size 1
    if ($size == 1) {
        return $combinations;
    }
    $new_combinations = array();
    foreach ($combinations as $combination) {
        foreach ($chars as $char) {
            $new_combinations[] = $combination . $char;
        }
    }
    return combination($chars, $size - 1, $new_combinations);

}

function permute($array, $numberOfChar)
{
  $output = combination($array, $numberOfChar);
  $result = array_values(array_filter($output,function($str){
    for($i = 0; $i < strlen($str); $i++) 
    { 
        for($j = $i + 1; $j < strlen($str); $j++)  
        { 
            if($str[$i] == $str[$j]) 
            { 
                return false; 
            } 
        } 
    } 
    return true; 
  }));
  return $result;
}


$array = array(1,2,3,4);
print_r(permute($array, 3)); // pass an array an num of permute char
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...