36進数を新しいサービスで使おうと思って
作ってたわけです。
いや 思いついたら面白くなってしまったというオチなんですが。
こんなかんじで。
function decodeDec36($decimal='') { if (preg_match('/^[0-9a-z]+$/',$decimal)) { $stack = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); $dec35 = 0; $len = strlen($decimal); for ($i=1; $i<=$len; $i++) { $tmpDec = array_search(substr($decimal,-$i,1),$stack,true); $dec35 += (int) $tmpDec * pow(36,$i - 1); } return $dec35; } else { return false; } } function encodeDec36($number='') { if (is_numeric($number)) { $stack = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); $enc35 = ''; $tempEnc = array(); while (($floor = floor((int) $number / 36)) != 0) { $tempEnc[] = $number % 36; $number = $floor; } $tempEnc[] = $number; $tempEnc = array_reverse($tempEnc); foreach ($tempEnc as $k=>$v) { $enc35 .= $stack[$v]; } return $enc35; } else { return false; } }
反省はしてない。
と勢いで作っていたらふと javascript の toString(36) を思い出した。
あれってPHPでねえのとおもったらあった・・・
$encoded = base_convert($number,10,36); //10進数の$numberを36進数に変換
無知って罪だ。
やっぱり反省します。