PHPの覚書

2つの日付の日数差を算出する

	$d1 = '2014/9/10';
	$d2 = '2014/9/21';
	$diff = diffDay($d2,$d1);
	echo '日付1 : '.$d1.'<br>';
	echo '日付2 : '.$d2.'<br>';
	echo '日数差 : '.$diff.'<br>';
	
	/**
	 * 2つの日付の日数差を算出する
	 * 
	 * diff = d2 - d1
	 * 
	 * @param date or string $d2
	 * @param date or string $d1
	 * @return 日数差
	 */
	function diffDay($d2,$d1){
	
		$u1=strtotime($d1);
		$u2=strtotime($d2);
	
		//日数を算出
		$diff=$u2-$u1;
		$d_cnt=$diff/86400;
	
		return $d_cnt;
	}
	

出力
	日付1 : 2014/9/10
	日付2 : 2014/9/21
	日数差 : 11
	


画像を回転させて保存

画像を回転させ、ファイル保存するソースコード。
ファイルに保存させず、一時的に回転した画像を表示させる方法もある。
	<?php
		// ファイルと回転角
		$filename = 'test.jpg';//画像ファイル名
		$ang = 90;//回転角度(90°回転)

		// 画像ファイル名から画像オブジェクトを作成
		$source = imagecreatefromjpeg($filename);

		// 画像オブジェクトを指定角度で回転
		$rotate = imagerotate($source, $ang, 0);

		// 画像オブジェクトからJPEGファイルを作成する。引数:画像オブジェクト、保存するファイル名(省略すると保存しない)、品質(0~100 省略時は75)
		imagejpeg($rotate,$filename,100);

		// メモリの解放
		imagedestroy($source);
		imagedestroy($rotate);


	?>
	
サンプル ドキュメント 参考サイト

web上の画像をコピーする

web上(別ドメイン)の画像をコピーして保存することができる。
ただSSL(httsから始まるURL)ページの画像はコピーできないこともある。
取得時に失敗するとWarningが出る。try~catchでもとらえられないのが難点。

サンプルソースコード
	$url = 'http://amaraimusi.sakura.ne.jp/sample/php/web_image_get/smp/imori.jpg';//WEB上の画像ファイルURL

	$data = file_get_contents($url);

	file_put_contents('img/test.jpg',$data);
	
サンプル file_get_contentsのドキュメント 参考サイト

変数や配列を1つの文字列にする | serialize

serialize関数で変数や多重構造配列等を1つの文字列に変換できる。
変換した文字列はunserialize関数で元の配列に戻すことができる。

サンプル

	$ary=array(
			array('id'=>101,'name'=>'ネコ'),
			array('id'=>102,'name'=>'ネズミ'),
			array('id'=>103,'name'=>'ウシ'),
			array('id'=>104,'name'=>'トラ'),
			array('id'=>105,'name'=>'鵜'),
			array('id'=>106,'name'=>'猿'),
	);

	$str = serialize($ary);//一つの文字列に変換

	//元の配列に戻す。
	$ary2=unserialize($str);

		
サンプル ドキュメント

配列をデバッグ | var_export

var_export関数で配列をデバッグできる。
	$ary=array(1=>'a',2=>'b');
	echo var_export($ary);//デバッグ
	

配列からURLのクエリを作成 | http_build_query

http_build_query関数は配列をURLのクエリ文字列に変換できる。
変換した文字列はparse_str関数で元の配列に戻すことができる。

ソースコード

		<?php

			$ary=array('neko'=>1,'inu'=>'2','tanuki'=>'狸');

			echo "<p>変換前</p>";
			echo var_dump($ary);

			echo "<br><br><p>変換後:文字列=http_build_query(配列)</p>";
			$str = http_build_query($ary);
			echo $str;

			echo "<br><br><br><p>parse_str関数で元に戻す。:parse_str(文字列,配列B)</p>";
			parse_str($str,$ary2);
			echo var_dump($ary2);


		?>
		

出力

変換前

		array (size=3)
		  'neko' =>; int 1
		  'inu' =>; string '2' (length=1)
		  'tanuki' =>; string '狸' (length=3)
		


変換後:文字列=http_build_query(配列)

neko=1&inu=2&tanuki=%E7%8B%B8


parse_str関数で元に戻す。:parse_str(文字列,配列B)

		array (size=3)
		  'neko' =>; string '1' (length=1)
		  'inu' =>; string '2' (length=1)
		  'tanuki' =>; string '狸' (length=3)
		


ドキュメント 参考サイト サンプル


日付の月末日を取得する方法 | Y-m-t

		$dateX='2012/12/12';
		$test = date('Y-m-t',strtotime($dateX));
		Debugger::dump('$test='.$test);//'$test=2012-12-31'
	

以前使っていた古い方法。
		/**
		 * 引数で指定した日付の月末日を取得
		 * @param  $d	日付
		 * @return 月末日
		 */
		function calcMonthLastDate($d){
			$type = gettype($d);

			if($type=='string'){
				$d2 = new DateTime($d);
			}else{
				$d2=$d;
			}
			$year=$d2->format("Y");
			$month=$d2->format("m");
			$lastday = date('t', mktime(0, 0, 0, $month, 1, $year));

			$d3=$year."/".$month."/".$lastday;

			if($type!='string'){
				$d3 = new DateTime($d3);
			}

			return $d3;
		}

		

金額など数値の3ケタ区切り | number_format

金額表記変換のサンプル  3000 → \3,000
	echo '&yen'.number_format(3000);
	// \3,000
	

配列を等分割する | array_chunk

以下に配列を3等分する例を示す。
	$ary=array(1,2,3,4,5,6,7,8,9,10,11,);
	$ary2=array_chunk($ary,3);
	

$ary2のダンプ
	array(
		(int) 0 => array(
			(int) 0 => (int) 1,
			(int) 1 => (int) 2,
			(int) 2 => (int) 3
		),
		(int) 1 => array(
			(int) 0 => (int) 4,
			(int) 1 => (int) 5,
			(int) 2 => (int) 6
		),
		(int) 2 => array(
			(int) 0 => (int) 7,
			(int) 1 => (int) 8,
			(int) 2 => (int) 9
		),
		(int) 3 => array(
			(int) 0 => (int) 10,
			(int) 1 => (int) 11
		)
	)