PHP

【PHP】アルファベット記号を用いた26進数を生成する。

Excelの列番号を取得したくてやった時のメモ。

function getColKey($target) {
	for($i = 0; $i < 26; $i++){
		$alphabet[] = strtoupper(chr(ord('a') + $i));
	}
	$one = fmod($target, 26);
	$result = $alphabet[$one];
	$carry = ($target - $one) / 26;
	while($carry != 0) {
		$one = fmod($carry - 1, 26);
		$result = $alphabet[$one].$result;
		$carry = ($carry - 1 - $one) / 26;
	}
	return $result;
}

関数に数値を渡せばその番号目の列キーが帰ってくる。

下記例。

echo getColKey(24)."\n";
echo getColKey(235)."\n";
echo getColKey(2146)."\n";
echo getColKey(13461)."\n";

↓

Y
IB
CDO
SWT

 

【PHP】全アルファベット文字列をスマートに取得する方法。

配列として取得するやーつー。

for($i = 0; $i < 26; $i++){
	$alphabet[] = chr(ord('a') + $i);
}

大文字で取得したければ下記のようにすればOK

for($i = 0; $i < 26; $i++){
	$alphabet[] = strtoupper(chr(ord('a') + $i));
}

ord()は指定した文字列をASCII値にしてくれる関数。これにより開始ASCII値を求める。あとはアルファベッドの記号数分ループし、都度chr()で文字列に戻すという感じ。

 

【CakePHP】ファイル名とクラス名が異なるファイルをインポートする方法。

ファイル名、クラス名が一致している場合は「App::uses()」を用いてクラスの読み込みを行っていたが、それらが異なる場合はうまく読み込めず頓挫していた。
しかし「App::import()」を用いることで上手に読み込めることが確認できたのでメモ。

例えば「app/Vendor」にライブラリを設置したとすると、読み込み方は下記の通り

App::import('Vendor', 'ClassName', array('file' => 'PATH'.DS.'TO'.DS.'CLASSFILE'.DS.'hoge.php'));

公式ドキュメントは下記を参照↓

http://book.cakephp.org/2.0/ja/core-utility-libraries/app.html#vendor

これで正しくインポートが行える。

 

【CakePHP2.4】CakePHPで動的にDBの接続先を変更する。

めも。
モデルごとにDBの接続先を変更したい時に便利。

まずは「app/Config/database/php」に接続情報の追加を行う

class DATABASE_CONFIG {

	public $default = array(
			'datasource' => 'Database/Mysql',
			'persistent' => false,
			'host' => '',
			'login' => '',
			'password' => '',
			'database' => '',
			'prefix' => '',
			'encoding' => 'utf8',
	);

	// 追加のDB接続情報
	public $hoge = array(
			'datasource' => 'Database/Mysql',
			'persistent' => false,
			'host' => 'xxxx',
			'login' => 'xxxx',
			'password' => 'xxxx',
			'database' => 'xxxx',
			'prefix' => '',
			'encoding' => 'utf8',
	);

}

次にモデルにてDBの接続先情報を指定する。

class Example extends AppModel {
	
	public $useDbConfig = 'hoge';
	
}

これでモデルの接続先DBを動的に変更することが出来る。

めっちゃ便利だね。

 

【PHP】シングルクオート、ダブルクオート、速度比較。

めも。

シングルクオートとダブルクオートはシングルクオートの方が処理速度が速い模様。
意味合いも違うしちゃんと使い分けるのが吉。

 

【PHP】スクリプト実行時間を取得する。

メモ。

現在の時間を取得したい場合、time()関数をコールするよりも$_SERVER変数の定義済み値を参照するほうが処理速度的にベター。

echo $_SERVER['REQUEST_TIME'];

これでスクリプト実行時間のタイムスタンプが取得できるので、あとはdate()関数になげるなり好きにすればOK。

【PHP】class内のメンバ変数の最適化。

classを定義する際、メンバ変数に定数としてしか用いない変数がある場合はconstとして定義したほうが高速になる。

下記例。

class hoge {
	// こうするより
	public $param = 'hoge';
	// こうしたほうが速い
	const PARAM = 'hoge';
}

これは使えるプチ情報。

 

【PHP】「==」と「===」はどちらが高速であるか。

気になったので調べた。

結論としては「===」のほうが若干速い。

理由は下記の通り。

「==」演算子は比較対象が同等であるかを適切に評価するため、左辺、右辺を適宜型変換した上で値の突合を行っている。
一方「===」演算子は型変換を行わないで式の評価を行うため、「==」演算子よりも速度面で有利なのである。