【PHP】アルファベット4文字を全通り順番に出力する

PHP

アルファベット4文字を全通り順番に出力(AAAA・AAAB~ZZZZ)するのを作成したかったので検索で探したところ、A~Zはあったのですが複数文字の順番表示はなかったので作ってみました。

もっとよい方法がありそうですが、asciiで指定された、1文字からなる文字列を返してくれるchrを使ってA~Zまでを出力し、for分で更に4文字分を出しています。

$alphabet = [];

$i = 0;
$a = 0;
$b = 0;
$c = 0;
for ( $i = 0; $i < 26; $i++ ) {
	if($a < 26 || $b < 26 || $c < 26){
		$text1 = "";
		$text1 .= chr(65 + $i);
		$text1 .= chr(65 + $i);
		$text1 .= chr(65 + $i);
		$text1 .= chr(65 + $i);

		$alphabet[] = $text1;
	}
	for ( $a = 0; $a < 26; $a++ ) {
		if( $i + $a + $b + $c !== 0000){
			if($b < 26 || $c < 26){
				$text2 = "";
				$text2 .= chr(65 + $i);
				$text2 .= chr(65 + $a);
				$text2 .= chr(65 + $b);
				$text2 .= chr(65 + $c);

				$alphabet[] = $text2;
			}
		}
		for ( $b = 0; $b < 26; $b++ ) {
			if( $i + $a + $b + $c !== 0000){
				if($c < 26){
					$text3 = "";
					$text3 .= chr(65 + $i);
					$text3 .= chr(65 + $a);
					$text3 .= chr(65 + $b);
					$text3 .= chr(65 + $c);

					$alphabet[] = $text3;
				}
			}
			for ( $c = 0; $c < 26; $c++ ) {
				if( $i + $a + $b + $c !== 0000){
					$text4 = "";
					$text4 .= chr(65 + $i);
					$text4 .= chr(65 + $a);
					$text4 .= chr(65 + $b);
					$text4 .= chr(65 + $c);

					$alphabet[] = $text4;
				}
			}
		}
	}
}
var_dump("<pre>");
var_dump($alphabet);
var_dump("</pre>");

途中のif文で!==0000の箇所はAAAAなどの4文字が複数出力されてしまうのを止めています。

アルファベットが26文字なので、これで26*26*26*26=456976分のアルファベット4文字が出力されると思います。以下にサンプルページを用意しましたがかなり重いのでご注意ください。

コメント

タイトルとURLをコピーしました