|
|
|
ต้องการจัดกลุ่มให้วัน เช่น จาก mon,tue,wed เป็น mon-wed ค่ะ |
|
|
|
|
|
|
|
สมมุติมีข้อข้อมูล
$dd = "TUE,MON,WED,FRI,SUN";
ต้องการให้เป็น MON-WED,FRI,SUN
หรือ
$dd = "TUE,MON,WED,FRI,SAT,SUN";
ต้องการให้เป็น MON-WED,FRI-SUN
หรือ
$dd = "MON,TUE,WED,THU,FRI,SAT,SUN";
ต้องการให้เป็น MON-SUN
คือถ้าเป็นนวันที่อยู่ติดกันไม่ต้องต้องให้แสดงทุกวัน ให้แสดงวันแรกกับวันสุดท้ายอ่ะค่ะ
ต้องเขียนแบบไหนดีคะ คิดไม่ออกเลย ทำเป็น array หรืออะไรก้ได้ค่ะ
ขอบคุณค่ะ
Tag : PHP, MySQL, Yii PHP Framework
|
|
|
|
|
|
Date :
2013-12-25 16:26:52 |
By :
^nueng^ |
View :
984 |
Reply :
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอ้ โจทย์ยากเอาการครับ
|
|
|
|
|
Date :
2013-12-27 12:41:22 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำได้แล้วค่ะ แนวทางคือ ทำข้อมูลที่ให้มาเป็น array แล้วมาเช็ค โดยเก็บไว้ที่ array อีกชุดนึง
เช่น ข้อมูล $dd = "TUE,MON,WED,FRI,SUN"; จะได้ชุดอะเรย์เป็น $arr = array(1,1,1,0,1,0,1)
แล้วเราก็วันหาค่าที่อยู่ติดกัน โดยให้แสดงหลักแรกกับหลักสุดท้าย ถ้าเจอ 0 ก็ใส่คอมม่าคั่น
แนวทางประมาณนี้ค่ะ
|
|
|
|
|
Date :
2013-12-27 15:52:12 |
By :
^nueng^ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เก่งครับ
|
|
|
|
|
Date :
2013-12-28 09:44:01 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
โค้ดแบบ oop ครับ
http://web-programming-bookmark.blogspot.com/2013/12/start-end-format-display-number.html
|
ประวัติการแก้ไข 2013-12-28 14:14:29
|
|
|
|
Date :
2013-12-28 14:03:58 |
By :
num |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|