読者です 読者をやめる 読者になる 読者になる

Keep It Real BLOG

ソフトウェアエンジニア。1児の父。 酒、ラーメン、サッカー好き。旅行も好きですが、普段は出不精で大抵たまプラーザ界隈に居ます。

PHPで曜日の連結

Web-PHP Web

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