PHP5 で利用できる新しい関数

PHP5 で利用できる新しい関数

PHP4 や PHP3 の時代から PHP での開発をしているとそれまでに蓄えた知識 だけで大抵のことはできるようになっているので、ドキュメントの隅々まで目 を通すことが少なくなります。

ところが、久々にドキュメントを眺めていたら、これまでは既存の関数を組み合わせて実 現していた処理が関数一発でできるようになっているケースが多くありました ので、自分用のメモも兼ねていくつかまとめておこうと思います。

array_combine()

配列Aの値を配列要素のキー、配列Bの値を配列要素の値として新しい配列を 生成するための関数です。従来は、

$keys = array('one', 'two', 'three'); // キーとなる値の配列
$values = array(1, 2, 3); // キーに対応する値の配列

$combined = array();
$keys_values = array_values($keys);
$values_values = array_values($values);
for ($i = 0; $i < count($keys); $i++) {
    $combined[$keys_values[$i]] = $values_values[$i];
}

と書いていたコードが、

$keys = array('one', 'two', 'three');
$values = array(1, 2, 3);
$combined = array_combine($keys, $values);

となります。

PHP: array_combine – Manual

scandir()

任意のディレクトリ内のファイル名およびサブディレクトリ名を配列で取得す るための関数です。これまでは以下のように書いていたコードが、

$entries = array();
if (!($dh = opendir('/path'))) {
    die("Can't open directory");
}
while (false !== ($entry = readdir($dh))) {
    $entries[] = $entry;
}
closedir($dh);

以下の記述だけで済むようになります。

if (false === ($entries = scandir('/path'))) {
    die("Can't open directory");
}

また、前者のコードでは配列へのエントリの格納順は「ファイルシステム上に 格納されている順」ですが、scandir 関数の戻り値はデフォルトでアルファ ベットの昇順にソートされています。ソート方向を降順にしたい場合は第二引 数に 1 を指定します。

PHP: scandir – Manual

file_put_contents()

データをファイルに書き込むための関数です。従来は以下のように記述してい たコードを、

$filename = 'foo.txt';
$data = "hello world\n";

if (!($f = fopen($filename, 'w'))) {
    die("Can't open file");
}
fwrite($f, $data);
fclose($f);

以下のように記述することができます。

$filename = 'foo.txt';
$data = "hello world\n";

file_put_contents($filename, $data);

ファイル名に既存のファイルを指定した場合、デフォルトでは上書き (fopen($f, ‘w’) の場合と同様の挙動)となります。追記させるには第三引 数に定数 FILE_APPEND を指定します。

PHP 5.1.0 からは第三引数に定数 LOCK_EX を指定することで排他的ロック を使用することもできます。

// 排他的ロックを使用して追記
file_put_contents($filename, $data, FILE_APPEND | LOCK_EX);

PHP: file_put_contents – Manual

stripos()

大文字小文字を問わず、文字列Aに文字列Bが最初に現れる位置を返す関数で す。従来は以下のように記述していたコードを、

$pos = strpos(strtolower('Hello World'), strtolower('world'));  // => 6

以下のように記述することができます。

$pos = stripos('Hello World', 'world');  // => 6

PHP: stripos – Manual