- array_search: documentation ( source)
- array_slice: documentation ( source)
- error_reporting: documentation ( source)
- array_keys: documentation ( source)
- str_split: documentation ( source)
<?php
/**
* 文字列の全パターン出力スクリプト
*
* @package Output
* @version 1.0.0
* @since File available since Release 1.0.0
*/
error_reporting(E_ALL);
/**
* ユーザIDをキーにキャッシュから本の配列を取得する。
* 取得出来ない場合はfalseを返す。
*
* @param int $lock ロック桁(12345の内3までが固定の場合、3をロック桁)
* @param arra $arr 出力対象文字列の配列化した値
* @param arra $srt $arrの出力順序
* @return array|bool
*/
function output($lock, $arr, $srt) {
global $length;
// ロック桁以降の全パターン出力
for($k=$lock; $k < $length; $k++) {
// 下桁の2パターンになるまでlock桁を進める
if($lock < $length - 3) {
output($lock+1, $arr, $srt);
} else {
// 表示(lockまでと下二桁)x2
for($j=0; $j <= 1; $j++) {
for($i=0; $i <= $lock; $i++) {
echo $arr[$srt[$i]];
}
echo $arr[$srt[$lock + $j + 1]];
echo $arr[$srt[$lock + 2 - $j]];
echo "\n";
}
}
// ロック桁の値の入れ替え(ロック桁以降でロック桁の次に大きい値)
$w = $srt[$lock];
for($i=1;$i <= $length-$lock; $i++) {
if (($next_addr = array_search($srt[$lock] + $i, array_slice($srt, $lock))) !== false) {
$next_addr += $lock;
break;
}
}
$srt[$lock] = $srt[$next_addr];
$srt[$next_addr] = $w;
}
echo "\n";
}
// main
$str = 'abcdef'; // 対象文字列
$length = strlen($str);
$arr = str_split($str);
$srt = array_keys($arr);
output(0, $arr, $srt);