abstract class StartEnd{
protected $m = array();
public function push($data){
if (count($this->m)==0){
$this->m[1] = $this->m[0] = $data;
}else{
$this->m[1] = $data;
}
}
public function __toString(){
if (count($this->m)==0){
return '';
}elseif ($this->m[0] == $this->m[1]){
return (string)$this->m[0];
}else{
return $this->m[0].'-'.$this->m[1];
}
}
public static function getFormat(array $a){
$groups = array();
$prev = -1;
static::sort($a);
foreach($a as $i){
if ($prev !== static::getPrev($i)){
$se = new static();
$groups[] = $se;
}
$se->push($prev = $i);
}
return implode(',',$groups);
}
abstract public static function sort(&$a);
abstract public static function getPrev($i);
}
class StartEndNumber extends StartEnd{
public static function sort(&$a){
sort($a,SORT_NUMERIC);
}
public static function getPrev($i){
return $i-1;
}
}
class StartEndDay extends StartEnd{
protected static $enum = array('MON','TUE','WED','THU','FRI','SAT','SUN');
public static function daySort($val1,$val2){
return array_search($val1,static::$enum)-array_search($val2,static::$enum);
}
public static function sort(&$a){
usort($a,'StartEndDay::daySort');
}
public static function getPrev($i){
$position = array_search($i,self::$enum);
if ($position === false){
return false;
}else{
return self::$enum[$position-1];
}
}
}
$a = array(1,4,3,2,5,9,10,12);
echo StartEndNumber::getFormat($a),' '; //1-5,9-10,12
$a = array('TUE','MON','WED','FRI','SAT');
echo StartEndDay::getFormat($a); //MON-WED,FRI-SAT
วันศุกร์ที่ 27 ธันวาคม พ.ศ. 2556
start end format display number
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น