繁体   English   中英

PHP数组收集

[英]PHP array collect

我的字母数组为24个字符:“ ABCDEFGHIJKLMNOPQRSTU VWX”

我想收集所有情况:3个独特的角色。

第一种情况:ABC,DEF,GHI,JKL,MNO,PQR,STU,VWX

这有点迟了,但是对于其他任何人来说,请读以下内容:如果您希望将字符串分成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的答案就更有意义了。

$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:1的关系。 基本上,一旦您有了字母的排列,您只需要调用array_chunk即可获取集合。

现在24岁! 任何东西(即620448401733239439360000)将永远无法容纳在内存中(无论是RAM还是磁盘),因此,最好的办法是生成124!之间的数字n 24! (排列编号),然后生成此类排列。 对于最后一步,请参阅例如Lehmer和Howell之后的置换生成以及其中引用的论文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM