簡體   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