PHP数组收集

我有字母数组24字符:“A B C D E F G H I J K L M N O P Q R S T U V W X” 我想收集所有案例:3个独特的字符。 第一种情况:ABC,DEF,GHI,JKL,MNO,PQR,STU,VWX     
已邀请:
字母表中的字母排列与集合列表之间存在1:1的关系。基本上,一旦你有一个字母表的排列,你只需要调用
array_chunk
来获得集合。 现在,24!任何东西(即620448401733239439360000)永远不会适合内存(无论是RAM还是磁盘),所以你能做的最好的事情就是在
1
24!
之间生成一个数字
n
(置换数),然后生成这样的排列。对于最后一步,请参阅例如Lehmer和Howell之后的排列生成以及引用的论文。     
$alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$c = strlen($alphabet);
$result = array();

for ($i = 0; $i < $c; ++$i) {
    $current0 = $i;
    for ($j = 0; $j < $c; ++$j) {
        if ($current0 == $j) continue;
        $current1 = $j;
        for ($k = 0; $k < $c; ++$k) {
            if (isset($current0 == $k || $current1 == $k)) continue;
            $result[] = $alphabet[$i].$alphabet[$j].$alphabet[$k];
        }
    }
}
希望我理解你的问题。这个在三个循环中迭代字母表,并且总是跳过已经使用过的字符。然后我将结果推送到$ result。 但最好只用五个字母来尝试脚本;)使用alls strlen($ alphabet)(现在不想算......)将需要非常多的内存。 (我确信有一些比这更快的hacky版本,但我认为这是最直接的。)     
这有点晚了,但对于其他人来说:如果你想将一个字符串分成3个字符的块,请尝试使用PHP内置的str_split()函数。它需要一个
$string
$split_length
的论点。例如:
$alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWX';
$grouped  = str_split($alphabet, 3);

var_export( $grouped );
这会输出以下数组:
array ( 0 => 'ABC', 1 => 'DEF', 2 => 'GHI', 
        3 => 'JKL', 4 => 'MNO', 5 => 'PQR', 
        6 => 'STU', 7 => 'VWX', )
这适用于问题中给出的示例。如果你想拥有这24个字母的所有可能组合,Artefacto的答案会更有意义。     

要回复问题请先登录注册