3v4l.org

run code in 300+ PHP versions simultaneously
<?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 = 'cba'; // 対象文字列 $length = strlen($str); $arr = str_split($str); $srt = array_keys($arr); output(0, $arr, $srt);

preferences:
57.46 ms | 402 KiB | 5 Q