プロが教える店舗&オフィスのセキュリティ対策術

PHPによる文字列の全パターン分割の方法を教えてください。

abcdefといった文字列があった場合に
a,b,c,d,e,f
a,bc,d,e,f
a,bc,de,f
a,bc,def
といった感じで全てのパターンで文字列を分割した配列を作りたいのですが、
うまくいきません。

A 回答 (1件)

以下で如何でしょう。



考え方
a~fの各文字の間にbitを置き、1なら両側の文字がくっつくとする。
a~fだと5bitになるので、00000~11111で文字の状態をつくりprintする。
------------------------------------------
<?PHP

$original = "a b c d e f";
$org_ary = explode(' ', $original); // 要素数6
$max_cnt = pow(2, count($org_ary) - 1); // bitで表せる状態数
$max_digit = $max_cnt / 2; // 最上位bitのみ1のときの値

for($cnt = 0; $cnt < $max_cnt; $cnt++){
$data0 = $org_ary;
$data1 = array();
array_push($data1, array_shift($data0));

$digit = $max_digit;
while($digit != 0){
if(($cnt & $digit) != 0){ // 状態cntのn bitが1ならば、両側の文字をくっつけて$data1に格納
$tmp = array_pop($data1) . array_shift($data0);
array_push($data1, $tmp);
}
else {
array_push($data1, array_shift($data0));
}
$digit >>= 1;
}
print(implode(',', $data1) . "\n");
}
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
サンプルソースを利用させて頂きましたところ、
希望通りの動作が確認できました。

お礼日時:2016/01/12 19:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!