PHP数组收集

时间:2010-07-10 15:03:26

标签: php arrays collect

我有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

3 个答案:

答案 0 :(得分:0)

$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版本,但我认为这是最直接的。)

答案 1 :(得分:0)

字母表字母和集合列表的排列之间存在1:1的关系。基本上,一旦你有了字母表的排列,你只需要调用array_chunk来获得集合。

现在,24岁!任何东西(即620448401733239439360000)永远不会适合内存(无论是RAM还是磁盘),所以你能做的最好的事就是在n1之间生成一个24!(排列数)然后生成这种排列。对于最后一步,请参阅示例Generation of permutations following Lehmer and Howell以及引用的文章。

答案 2 :(得分:0)

这有点晚了,但是对于其他人来说:如果你想将一个字符串分成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的答案会更有意义。