PHPで曜日の連結

DB内に保存されて日付データを連結するというプログラムが必要になったので、考えてみました。

扱うデータは以下の感じ。

0,1,2,3,6 // 日,月,火,水,土

取得する関数は以下のようにしました。

// 曜日名取得関数
function get_day_names($ids) {
$day_name = array(日,月,火,水,木,金,土);
if( @$ids ) {
$data = array();
foreach($ids as $key => $val) {
foreach($day_name as $day_key => $day_val) {
if($day_key == $val){
$data = $day_val;
}
}
}
return $data;
}
return false;
}
// 曜日連結関数
function get_days( $day ) {
$_explode = explode(",", $day);
if ( count($_explode) == 1 ) {
$_explode = $this->get_day_names($_explode);
return $_explode;
}
$temp_s = $_explode[0];
$data = array();
for( $i = 0; $i < count($_explode); $i++ ) {
if( $i == 0 ) {
$temp = $temp_s;
continue;
}
if( $temp+1 == $_explode[$i]) {
$temp = $_explode[$i];
} else {
$temp_end = $_explode[$i-1];
if($temp_s == $temp_end){
$sequence = array($temp_s);
$data = join(" ",$this->get_day_names($sequence));
}else{
$sequence = array($temp_s,$temp_end);
$data = join("〜",$this->get_day_names($sequence));
}
$temp = $_explode[$i];
$temp_s = $_explode[$i];
}
if( $i == (count($_explode)-1) ) {
$end_day = $_explode[$i];
if($temp_s == $end_day){
$sequence = array($temp_s);
$data = join(" ",$this->get_day_names($sequence));
}else{
$sequence = array($temp_s,$end_day);
$data[] = join("〜",$this->get_day_names($sequence));
}
}
}
return $data;
}

これで、get_daysに上述のデータを送ると、日〜水と土の値がリストで返ってくるようになります。
曜日とか他のことにも応用出来そうだ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です