2009年11月10日火曜日

php5.3のクロージャー(無名関数)を使ってみる

どうも、俺@猛仕事中です。

新規案件にphp5.3.0を入れてみた。
せっかくなので5.3からの新機能「Clouser(クロージャー)」を使ってみる。

やりたい事は、絵文字データを内部コードに変換してDBへ保存し、それを表示する際に絵文字画像に変換して出力したいという事。
絵文字画像というのは、<img src="xxx">に変換するって事ね。
※絵文字内部コードは[[MG:001]]~[[MG:999]]のフォーマット
<?php
1 // プログラムは適当に書き換えています。
2 function convertToImg($text) {
3 // 変換テーブルを配列で取得
4 $emoji_map = file("emoji_map.txt");
5
6 $converted = preg_replace_callback("/\[\[MG:([0-9]{3})\]\]/",
7 function ($match) use ($emoji_map) {
8 if (isset($emoji_map[$match[1]])) {
9 return "<img src='./img/emoji/".$emoji_map[$match1]].".gif'>";
10 }
11 return $match[0];
12 },
13 $text
14 );
15
16 return $converted;
17 }
てな具合です。

preg_replace_callback()関数の7行目~10行目までで無名関数を使っています。
$text内で /\[\[MG:([0-9]{3})\]\]/ にマッチした最初の([0-9]{3})を、配列$emoji_mapのキーに指定しています。

使う事ないだろうと思っていた、preg_replace_callback()関数とクロージャーを使う事になるとは。。


以上、自分でいろいろやってみてねー。

0 件のコメント: