あいまい一致関数 | similar_text_ex | 比較文字1と比較文字2の一致率による判定

関数

	/**
	 * 比較文字1と比較文字2の一致率が許可一致率を超える場合、trueを返す。
	 * 
	 * 比較文字2は配列で渡すこともできる。
	 * 配列にした場合、配列内いずれかが許可一致率を超えるとき、trueを返す。
	 * 
	 * @param string $tarStr 比較文字1
	 * @param multi $comps	比較文字2、配列指定も可。
	 * @param bool $permitPar 許可一致率
	 */
	function similar_text_ex($tarStr,$comps,$permitPar){
		
		$flg=false;
		$percent=0;
		if(is_array($comps)){
			foreach($comps as $comp){
				similar_text($tarStr,$comp,$percent);//一致率
				if($percent >=$permitPar){
					$flg=true;
					break;
				}
				
			}
		}else{
			
			similar_text($tarStr,$comps,$percent);
			if($percent >=$permitPar){
				$flg=true;
			}
		}
		
		return $flg;
	}
	

使用例1

	//70%以上一致する場合、true。
	$res=similar_text_ex('五月雨をあつめて早し最上川','12月雨を集めて早し最上川',70);
	echo $res;// ←true or false
	

使用例2

	//リストのいずれかに90%以上一致する場合、true。
	$res=similar_text_ex('五月雨をあつめて早し最上川',
			array('雨を集めて信濃川','五月雨をあつめて早し四万十川','十二月雨をあつめて遅し最上川'),
			90);
	echo $res;// ←true or false
	

文字列の先頭から一文字を取得する

文字列の先頭1文字はmb_substrで簡単に取得できる。

source code

	$str="いろはにほへと";
	echo mb_substr($str ,0 ,1);// 出力 → い
	

先頭から2文字取得する場合

	$str="いろはにほへと";
	echo mb_substr($str ,0 ,2);// 出力 → いろ
	

文字列の末尾から一文字を取得する

文字列の末尾1文字は、mb_substr関数の第2引数に負値を指定することにより、簡単に取得できる。

source code

	$str="いろはにほへと";
	echo mb_substr($str, -1);// 出力 → と
	

末尾から2文字取得する場合

	$str="いろはにほへと";
	echo mb_substr($str, -2);// 出力 → へと
	

日付が8桁数値表記であれば、y/m/d形式に変換する

関数

	/**
	 *日付が8桁数値表記であればy/m/d形式に変換する
	 * 例 20121212→ 2012/12/12
	 * 
	 * 1970/1/1 から 2038/1/19に対応。対応範囲外である場合は 1970/1/1 になる。
	 * 
	 * @param $d 8桁数値表記の日付
	 * @return y/m/d形式の日付(8桁数値でないなら未変換)
	 */
	function conv8ToDate($d){
		if(preg_match("/^[0-9]+$/", $d)){
			$d=date("Y/m/d",strtotime($d));
		}
		return $d;
	}
	?>
	

使用例

	$test = '20380119';
	$test2 = conv8ToDate($test);
	
	echo '<br>変換前→'.$test;
	echo '<br>変換後→'.$test2;
	
	//出力
	//変換前→20380119
	//変換後→2038/01/19
	

最大実行時間(タイムアウト)をphp.iniで設定する | Maximum execution time of 30 seconds exceeded

デフォルトで設定されている最大実行時間30秒を超えると以下のエラーが表示される。
Fatal error: Maximum execution time of 30 seconds exceeded
php.iniで最大実行時間を増やすことができる。
php.iniをテキストエディタで開き「max_execution_time」の数値を増やす。

変更前は30秒
max_execution_time=30
120秒に変更する
max_execution_time=120
変更後はApacheを再起動すること。

タイムアウトの延ばす | set_time_limit

デフォルトでは処理時間が30秒を超えるとタイムアウトエラーになる。
set_time_limitを処理の最初部分に記述すると、処理時間を延ばすことができる。
	set_time_limit(600); // 最大処理時間を600秒にする。
	

ログアウトの時間を伸ばすphp.iniの設定 | ログイン認証時間を延ばす | セッションタイムアウトの時間を1日にする

php.iniに下記を記述

	session.gc_maxlifetime = 86400
	session.cookie_lifetime = 86400
	

ログアウトの時間を伸ばす場合、session.gc_maxlifetimeとcookie_lifetime.sessionは一緒に設定した方がいいですか?

セッションタイムアウト(ログアウト時間)を調整する際には、session.gc_maxlifetimeとsession.cookie_lifetimeの両方を適切に設定することが推奨されます。これら二つの設定はセッションの有効期間と関連しており、それぞれが異なる側面を制御します。 session.gc_maxlifetimeは、サーバー上のセッションデータがガベージコレクション(削除)されるまでの時間を制御します。一方、session.cookie_lifetimeは、クライアント(ブラウザ)がセッションクッキーを保持する期間を制御します。 これら二つの設定が一致しない場合、以下のような問題が発生する可能性があります: もしsession.gc_maxlifetimeがsession.cookie_lifetimeより短い場合、ブラウザはセッションクッキーを保持しているにもかかわらず、そのセッションはすでにサーバー上から削除されてしまう可能性があります。その結果、ユーザーはログアウト状態となります。 逆に、もしsession.cookie_lifetimeがsession.gc_maxlifetimeより短い場合、クッキーが削除されてしまいますが、そのセッションデータはサーバー上に残り続けます。これはリソースの無駄遣いとなり、またセキュリティリスクを引き起こす可能性があります。 したがって、これらの値を一致させることで、セッションの有効期間を一貫して制御することができます。ただし、これらの設定を長時間にすることは、未使用のセッションが長時間サーバー上に残るというセキュリティリスクやパフォーマンスの問題を引き起こす可能性がありますので注意が必要です。 ここで重要なのは、この二つのパラメータを同じ値に設定するだけでなく、アプリケーションのセキュリティ要件とユーザ体験のニーズに適した値を設定することです。例えば、セッションが不活動の状態で長時間開いていることは適切な場合もあれば、不適切な場合もあります。

セッションのエラー:Warning: session_start(): Cannot start session when headers already sent in ...

session_start()を実行したときに下記の警告が表示されることがある。
Warning: session_start(): Cannot start session when headers already sent in ...
原因:session_start()が実行される前にechoなどの出力が発生すると、この警告が出る。
対策は、session_start()をecho出力する処理の前に呼び出すこと。 もしくはob_start()とob_end_clean()を用いてecho出力を一旦クリアすることである。

wordpressプラグイン開発の際、wp-load.phpを読み込んだ時によく起こるエラー。 wp-load.phpは読込の際、なんらかのecho出力をしている疑いがある。 wp-load.phpの読込をob_start()とob_end_clean()で挟むと解決するようだ。
	ob_start();
	include '../../../../wp-load.php';
	// 注意:wp-load.phpは$_POSTの値をサニタイズしてしまう。サニタイズされると$_POSTに格納されているjson文字列がパースできなくなるので注意。
	global $wpdb;
	ob_end_clean();
	session_start();
	


配列のキーと値を入れ替える | array_flip

array_flip関数は配列のキーと値を入れ替える。

使用例
	$ary=array(
		0=>'neko',
		1=>'yagi',
		2=>'kani',
		'same'=>'サメ',
	);
	$map=array_flip($ary);
	Debugger::dump($map);
	
$mapの出力。  キーと値が逆転している。
	array(
		'neko' => (int) 0,
		'yagi' => (int) 1,
		'kani' => (int) 2,
		'サメ' => 'same'
	)
	

UNIXタイムスタンプを取得する | time

UNIXタイムスタンプは1970 年1月1 日からの通算秒である。
echo time();
出力例
1456982682

ミリ秒 | microtime

microtime関数にて、UNIXタイムスタンプをミリ秒以下の単位まで取得できる。

1970 年1月1 日からの通算秒をfloat型で取得。小数点以下はミリ秒以下の単位に相当する。
echo microtime(true);//出力例→ 1456983058.4316	

引数を略すと、通算秒をミリ秒と自然数秒にスペースで区切って表示する。スペースより左側がミリ秒で、右側が自然数秒。
echo microtime();//出力例→ 0.43157200 1456983058	

UNIXタイムスタンプ
echo time();出力例→ 1456983058


1行IF文

1行のIF文
	$name="wani";
	$res = ( $name == "tokage" ) ? 1 : 0;
	echo $res;
	
上の1行IF文は以下のif文と同じ意味を持つ。
	$name="wani";
	$res=null;
	if($name=='tokage'){
		$res=1;
	}else{
		$res=0;
	}
	echo $res;
	

よく使うIF文

配列に値がセットされているなら値を取得する。
$xxx = (empty($ent['xxx'])) ? null : $ent['xxx'];

キャメルケースおよびスネークケースへの変換

キャメルケースに変換
	/**
	 * キャメルケースにスネークケースから変換する
	 * 
	 * 先頭も大文字になる。
	 * 
	 * @param string $str スネークケースの文字列
	 * @return キャメルケースの文字列
	 */
	function camelize($str) {
		$str = strtr($str, '_', ' ');
		$str = ucwords($str);
		return str_replace(' ', '', $str);
	}
	


スネークケースに変換
	/**
	 * スネークケースにキャメルケースから変換
	 * @param string $str キャメルケース
	 * @return string スネークケース
	 */
	function snakize($str) {
		$str = preg_replace('/[A-Z]/', '_\0', $str);
		$str = strtolower($str);
		return ltrim($str, '_');
	}
	

参考:Qiita

ローワーキャメルケースへの変換


	<?php 
	
	$data = array(
			'neko',
			'big_dog',
			'RedFox',
			'greenTanuki',
			'big_last_pig_master',
			'SmallFirstPigMaster',
			'smallFirstPigMaster',
			'',
			'あいう',
			'123'
			
	);
	
	echo "<table class='tbl2'><thead><tr><th>元文字</th><th>ローワーキャメルケース</th></tr></thead><tbody>";
	foreach($data as $str){
		$lc_str = lowerCamelize($str);
		echo "<tr><td>{$str}</td><td>{$lc_str}</td></tr>";
	}
	echo "</tbody></table>";
	
	
	/**
	 * ローワーキャメルケースに変換する
	 *
	 * @note
	 * ローワーキャメルケースは先頭の一文字が小文字のキャメルケース。
	 *
	 * @param string $str スネーク記法、またはキャメル記法の文字列
	 * @return string ローワーキャメルケースの文字列
	 */
	function lowerCamelize($str){
		
		if(empty($str)) return $str;
		
		// 先頭の一文字が小文字である場合、一旦キャメルケースに変換する。
		$h_str = substr($str,0,1);
		if(ctype_lower($h_str)){
			// キャメルケースに変換する
			$str = strtr($str, '_', ' ');
			$str = ucwords($str);
			$str = str_replace(' ', '', $str);
		}
		
		// 先頭の一文字を小文字に変換する。
		$str = lcfirst($str);
		
		return $str;
	
	}
	
	?>
	

出力

元文字ローワーキャメルケース
nekoneko
big_dogbigDog
RedFoxredFox
greenTanukigreenTanuki
big_last_pig_masterbigLastPigMaster
SmallFirstPigMastersmallFirstPigMaster
smallFirstPigMastersmallFirstPigMaster
あいうあいう
123123

テーブル名からモデル名に変換する

ソースコード

	/**
	 * テーブル名からモデル名に変換する
	 *
	 * @param string $tblName テーブル名(例:big_animals)
	 * @return モデル名(例:BigAnimal)
	 */
	function convModelName($tblName) {
		$tblName = strtr($tblName, '_', ' ');
		$tblName = ucwords($tblName);
		
		
		// 末尾が"s"であるなら削る
		if(mb_substr($tblName,-1) == 's'){
			$tblName=mb_substr($tblName,0,mb_strlen($tblName)-1);
		}
		
		
		return str_replace(' ', '', $tblName);
	}