曜日を扱う際の面倒臭さ…
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に上述のデータを送ると、日〜水と土の値がリストで返ってくるようになります。
曜日とか他のことにも応用出来そうです。
コメントを残す
コメントを投稿するにはログインしてください。