Created
April 19, 2011 09:39
-
-
Save junichi11/927067 to your computer and use it in GitHub Desktop.
CakePHP KiribanComponent (check round number)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* KiribanComponent (Kiriban is round number) | |
* | |
* @author junichi11 | |
*/ | |
class KiribanComponent extends Object{ | |
public $_controller = null; | |
/** | |
* @var array $option オプション | |
* snakeEyes ゾロ目 ex. 111, 22222,... | |
* mirror ミラー ex. 123321, 14541,... | |
*/ | |
public $_option = array( | |
'snakeEyes' => true, | |
'mirror' => true, | |
'unit' => 100, | |
'countup' => true, | |
'countdown' => true, | |
); | |
//=============================================== | |
// callback method | |
//=============================================== | |
/** | |
* startup | |
* @param object $controller | |
* @return | |
*/ | |
function startup(&$controller){ | |
$this->_controller = $controller; | |
} | |
//=============================================== | |
// original method | |
//=============================================== | |
/** | |
* キリ番であるかどうか判定する | |
* @param number $number カウント | |
* @return mixed false|string(どのキリ番か) | |
*/ | |
function isKiriban($number){ | |
$res = false; | |
$res = $this->_request($number); | |
return $res; | |
} | |
/** | |
* 登録された判定をリクエスト | |
* @param number $number | |
* @return | |
*/ | |
function _request($number){ | |
if(isset($this->_controller->kiriban)){ | |
$this->_option = am($this->_option, $this->_controller->kiriban); | |
} | |
$res = false; | |
foreach($this->_option as $key => $value){ | |
$method = ucfirst($key); | |
$method = 'is'.$method; | |
if($value == true && $this->$method($number)){ | |
return $key; | |
} | |
} | |
return $res; | |
} | |
/** | |
* ゾロ目の判定 | |
* @param number $number | |
* @return boolean | |
*/ | |
function isSnakeEyes($number){ | |
$res = false; | |
if(preg_match('/^1{2,}$/', $number) | |
|| preg_match('/^2{2,}$/', $number) | |
|| preg_match('/^3{2,}$/', $number) | |
|| preg_match('/^4{2,}$/', $number) | |
|| preg_match('/^5{2,}$/', $number) | |
|| preg_match('/^6{2,}$/', $number) | |
|| preg_match('/^7{2,}$/', $number) | |
|| preg_match('/^8{2,}$/', $number) | |
|| preg_match('/^9{2,}$/', $number)) | |
{ | |
$res = true; | |
} | |
return $res; | |
} | |
/** | |
* ミラー判定 | |
* 2桁以上の数値を判定する | |
* @param number $number | |
* @return boolean | |
*/ | |
function isMirror($number){ | |
$res = false; | |
$strlen = strlen($number); | |
if($strlen < 2 || preg_match("/[^0-9]/", $number)){ | |
return $res; | |
} | |
$hlength = floor($strlen/2); | |
$prenumber = substr($number, 0, $hlength); | |
$reversePrenumber = strrev($prenumber); | |
$sufnumber = substr($number, strlen($number)-$hlength, $hlength); | |
if($reversePrenumber == $sufnumber){ | |
$res = true; | |
} | |
return $res; | |
} | |
/** | |
* 単位判定 | |
* @param number $number | |
* @return boolean | |
*/ | |
function isUnit($number){ | |
$res = false; | |
if(($number <= 0) | |
|| ($this->_option['unit'] == 0) | |
|| preg_match("/[^0-9]/", $number) | |
){ | |
return $res; | |
} | |
$remainder = $number % $this->_option['unit']; | |
if($remainder == 0){ | |
$res = true; | |
} | |
return $res; | |
} | |
/** | |
* 連番(カウントアップ)判定 | |
* @param number $number | |
* @return | |
*/ | |
function isCountup($number){ | |
return $this->_isCountupdown($number, 'up'); | |
} | |
/** | |
* 連番(カウントダウン)判定 | |
* @param number $number | |
* @return | |
*/ | |
function isCountdown($number){ | |
return $this->_isCountupdown($number, 'down'); | |
} | |
/** | |
* 連番判定 | |
* @param number $number | |
* @param string $updown up|down | |
* @access private | |
* @return | |
*/ | |
function _isCountupdown($number, $updown){ | |
$res = false; | |
$strlen = strlen($number); | |
if($strlen < 2 || preg_match("/[^0-9]/", $number)){ | |
return $res; | |
} | |
$numberTop = substr($number, 0, 1); | |
$compareNum = $numberTop; | |
if($compareNum != "-"){ | |
for($i = 0; $i < $strlen - 1; $i++){ | |
if($updown == 'up'){ | |
$numberTop++; | |
if($numberTop > 9){ | |
break; | |
} | |
}else if($updown == 'down'){ | |
$numberTop--; | |
if($numberTop < 0){ | |
break; | |
} | |
}else{ | |
} | |
$compareNum .= $numberTop; | |
} | |
if($compareNum == $number){ | |
$res = true; | |
} | |
} | |
return $res; | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment