PHP

【PHP】配列結合時のarray_merge()と「+」演算子の速度について。

array_mergeは連結後に添字を振り直すという処理が挟まるため、「+」演算子を用いたほうが高速である模様。
あと「+」演算子は関数呼び出しのオーバーヘッドがないから速い?んじゃないかと考えている。

 

【PHP】スクリプト上からメールコマンドを実行する際の注意。

めも。

まずは意図した通りにメールが送信されず処理がストップする例。

exec('mail -s "title" -r test@example.com test@example.com');

上記コマンドのみだと、この行に到達した時点でメール本文の入力待ち状態に移行してしまうため処理が止まってしまう。
これを回避するためには下記のようにして標準出力をメール本文に渡してやる必要がある。

exec('echo "" | mail -s "title" -r test@example.com test@example.com');

前半で空文字をechoしてやることで本文空のメールとして送信することが出来る。
また任意の文字列をメール本文に乗っけたい場合は、下記の通り好きな文字をechoしてやればよい。

exec('echo "テストメールです。" | mail -s "title" -r test@example.com test@example.com');

 

【PHP】入力配列の中から指定したキーのみを抽出する。

PHP5.5より実装。

下記のような連想配列があったとする。

$array = [
	[
		'id' => 1,
		'key' => 3352,
		'name' => 'hoge',
		'email' => 'hoge@example.com'
	],
	[
		'id' => 2,
		'key' => 2265,
		'name' => 'fuga',
		'email' => 'fuga@example.com'
	],
	[
		'id' => 3,
		'key' => 7311,
		'name' => 'piyo',
		'email' => 'piyo@example.com'
	]
];

上記連想配列中の「email」要素のみを取り出したい場合、array_column()を用いると便利。

$emails = array_column($array, 'email');

var_dump($emails);

↓

array(3) {
  [0]=>
  string(16) "hoge@example.com"
  [1]=>
  string(16) "fuga@example.com"
  [2]=>
  string(16) "piyo@example.com"
}

また、第3引数にも入力配列中の要素を指定することで結果配列のキーに指定した要素の値を挿入してくれる。

$emails = array_column($array, 'email', 'key');

var_dump($emails);

↓

array(3) {
  [3352]=>
  string(16) "hoge@example.com"
  [2265]=>
  string(16) "fuga@example.com"
  [7311]=>
  string(16) "piyo@example.com"
}

 

【PHP】変数の評価結果をブーリアン値で取得する。

PHP5.5より追加。

どこで使うのかピンと来ないシリーズ。

$var = '0';

$res = boolval($var);

var_dump($res);

↓

bool(false)

 

PHP5.5より前バージョンでも、下記関数を実装すれば同様の処理となる。

if(!function_exists('boolval')) {
	function boolval($var) {
		return !!$var;
	}
}

【PHP】elseifとelse ifの違い。

めも。

$a = false;
$b = true;

// 波括弧を用いて記述する場合は「else if」と二単語に分割しても良い。
if($a) {
	echo '1';
} else if($b) {
	echo '2';
}

// コロンを用いて記述する場合は「elseif」と記述しなければならない。
if($a):
	echo '1';
elseif($b):
	echo '2';
endif;

基本的にelseとifは分割せず「elseif」と記述しておけばすべての場合に対応できる模様。

 

【PHP】for文に複数の式を記述する。

今更for文の仕様を知ったという。

まずは普通のfor文

for($i = 0; $i < 10; $i++) {
	echo '$i : '."$i\n";
}

↓

$i : 0
$i : 1
$i : 2
$i : 3
$i : 4
$i : 5
$i : 6
$i : 7
$i : 8
$i : 9

複数式を記述するパターン。

for($j = 0, $k = 0; $j < 10, $k < 30; $j++, $k += 5) {
	echo '$j : '."$j\n";
	echo '$k : '."$k\n";
}

↓

$j : 0
$k : 0
$j : 1
$k : 5
$j : 2
$k : 10
$j : 3
$k : 15
$j : 4
$k : 20
$j : 5
$k : 25

各式をカンマ「,」で区切ることで複数式を評価させることが可能。

 

【PHP】PHP.5.4から関数の返り値が配列だった場合、要素へ直接アクセス出来るようになった。

めも。

下記例。

function a() {
	return [
		'one' => 'aaa',
		'two' => 'bbb',
		'three' => 'ccc'
	];
}

$a = a()['two'];
var_dump($a);

↓

string(3) "bbb"

※PHP5.3までは上記の記述方法をするとシンタックスエラーとなり処理がストップする。

 

【CentOS】CentOS6にyumでphp5.5をインストールする。

やった時のメモ。

1, まずはリポジトリの追加。

rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

2, 追加完了後、下記コマンドを実行。

rpm -qa | grep webtatic

3, 下記のように表示されればOK

webtatic-release-6-4.noarch

4, 現在インストールされているPHP関連のソフトウェアをすべてアンインストール

yum erase php*

5, アンインストールが完了したら、下記コマンドを実行しPHP5.5をインストール。

yum install php55w.i386 php55w-cli.i386 php55w-common.i386 php55w-mbstring.i386 php55w-mysql.i386 php55w-xml.i386 php55w-pdo.i386 php55w-pear.noarch php55w-intl.i386 php55w-devel.i386

※もしno packageっていわれたら下記。

yum install php55w php55w-cli php55w-common php55w-mbstring php55w-mysql php55w-xml php55w-pdo php55w-pear.noarch php55w-intl php55w-devel

6, 完了後下記コマンドを実行。

php -v

7, PHP5.5.7と表示されていれば成功。