Top  Dolphy Software  

TOP > セミナー >  HTMLテンプレート > 連想配列

連想配列と一括置換

HTMLテンプレートの文字を連想配列のデータで置き換える方法を考えて見ましょう。
show.php   show.htm
<?php
// テンプレートの読み込み $html = file_get_contents("show.htm"); // テンプレートの文字コード変換
$to_encoding = mb_internal_encoding(); $html = mb_convert_encoding($html, $to_encoding, "auto");

// データ
$data = array(     "name" => "りんご",     "price" => 1230,     "remark" => "ふじ 青森県産" ); // テンプレート文字の置換 $html = str_replace("{data.name}", $data['name'], $html); $html = str_replace("{data.price}", $data['price'], $html); $html = str_replace("{data.remark}", $data['remark'], $html); // テンプレートの出力 print $html; ?>
  <html>
<head>
<title>詳細表示</title>
</head>
<body>
<table border="1">
<tr>
<td>品名</td>
<td>{data.name}</td>
</tr>
<tr>
<td>価格</td>
<td>{data.price}</td>
</tr>
<tr>
<td>備考</td>
<td>{data.remark}</td>
</tr>
</table>
</body>
</html>

次にデータを一括して置換する例を2つ...
ループで置換する   $html
// テンプレート文字の置換
foreach ($data as $key => $val) { $html = str_replace("{data.$key}", $val, $html); }
  <html>
<head>
<title>詳細表示</title>
</head>
<body>
<table border="1">
<tr>
<td>品名</td>
<td>りんご</td>
</tr>
<tr>
<td>価格</td>
<td>1230</td>
</tr>
<tr>
<td>備考</td>
<td>ふじ 青森県産</td>
</tr>
</table>
</body>
</html>
     
正規表現のe修飾子を使って置換する   $html
// テンプレート文字の置換
$str = preg_quote("{data.*}"); $pattern = '/'.str_replace('\*', '([a-zA-Z0-9_\-]+)', $str).'/e';
$replacement = '$data["$1"]'; $html = preg_replace($pattern, $replacement, $html);
  <html>
<head>
<title>詳細表示</title>
</head>
<body>
<table border="1">
<tr>
<td>品名</td>
<td>りんご</td>
</tr>
<tr>
<td>価格</td>
<td>1230</td>
</tr>
<tr>
<td>備考</td>
<td>ふじ 青森県産</td>
</tr>
</table>
</body>
</html>

補足

正規表現のe修飾子を使って置換するときの注意 2007-12-13

preg_replace( )でe修飾子を使って置換するとき、文字列にシングルクォート(')、ダブルクォート(")、バックスラッシュ(\)があるとクォートされるので、元に戻すために stripslashes( ) を使うと良いと思います。

修正例

// テンプレート文字の置換
$str = preg_quote("{data.*}");
$pattern = '/'.str_replace('\*', '([a-zA-Z0-9_\-]+)', $str).'/e';
$replacement = 'stripslashes($data["$1"])';
$html = preg_replace($pattern, $replacement, $html);
 
戻る 文字コード HTMLテンプレート 次へ フォーマット
 
△画面上