2012-01-03 7 views
0

私はstr_replaceと中かっこ/中括弧のまわりで頭を掴みようとしています。 次の行では、{the_title}の入力は$ some_runtime_generated_titleの配列で置き換えられますが、最初の値は何を意味しますか($ str_template)?str_replaceを使った部分文字列置換

str_replace($str_template, '{the_title}', $some_runtime_generated_title); 

は、私はPHPのことをどのように行うのでしょう

$dog='lassy'; 
{dog} 
would output >> lassy 

........私は次のことをやってみたかったと言いますか?

+0

PHP用のテンプレートエンジン(MustacheJSの精神を借りて)をお探しですか? –

+0

この種の質問は、[マニュアルの速い把握](http://php.net/str_replace)で簡単に答えられます。それは例を持っています。私は人々がマニュアルなしでコードを管理する方法を理解できません。 –

+0

私がここに来る前にマニュアルを読みましたが、わかりませんでした。何かを読んで理解するのは全く違っています。 –

答えて

2

プレースホルダの交換のためのstr_replaceの簡単な使用例は次のようになります。

$paramNames = array("{name}", "{year}", "{salutation}"); 
$paramValues = array("Iain Simpson", "2012", "Alloha"); 
$text = "{salutation}, {name}! Happy {year}!"; 
str_replace($paramNames, $paramValues, $text); 

$paramNames$paramValues配列が同じ数の値を持ちます。

より具体的な目的関数は以下のようになります

/* Processes a text template by replacing {param}'s with corresponding values. A variation fo this function could accept a name of a file containing the template text. */ 
/* Parameters: */ 
/* template - a template text */ 
/* params - an assoc array (or map) of template parameter name=>value pairs */ 
function process_template($template, $params) { 
    $result = $template; 
    foreach ($params as $name => $value) { 
     // echo "Replacing {$name} with '$value'"; // echo can be used for debugging purposes 
     $result = str_replace("{$name}", $value, $result); 
    } 
    return $result; 
} 

使用例:

$text = process_template("{salutation}, {name}! Happy {year}!", array(
    "name" => "Iain", "year" => 2012, "salutation" => "Alloha" 
)); 

ここで、オブジェクト指向のアプローチの例は次のとおり

class TextTemplate { 
    private static $left = "{"; 
    private static $right = "}"; 
    private $template; 

    function __construct($template) { 
     $this->template = $template; 
    } 

    public function apply($params) { 
     $placeholders = array(); 
     $values = array(); 
     foreach($params as $name => $value) { 
      array_push($placeholders, self::$left . $name . self::$right); 
      array_push($values, $value); 
     } 
     $result = str_replace($placeholders, $values, $this->template); 
     return $result; 
    } 
} 

使用例:

$template = new TextTemplate("{salutation}, {name}! Happy {year}!"); 
$text = $template->apply(array("name" => "Iain", "year" => 2012, "salutation" => "Alloha")); 
+0

ああ、あなたの助けてくれてありがとう、私は一瞬のうちに遊んで、私ができることを見て、それは電子メールのテンプレートやもののために非常に便利ですが、私は最初の昨日、そしてほとんどの説明が混乱していた。 –

+0

代替品をエコーアウトするにはどうしたらいいですか?エコー '{name}'を試しました。しかし、それは私に{名前}を与えるだけで、私も{名前}を試みたが、これは私にPHPエラーを与える。 –

+0

@Iain、達成したいことはわかりませんが、変数の単純なエコーは 'echo" {$ name} ";'で実行できます。 – Vlad

1

あなたは実質的に自分で答えた:

<?php 
$some_runtime_generated_title = 'generated title'; 
$str_template = 'This is the template in which you use {the_title}'; 
$parsed = str_replace('{the_title}', $some_runtime_generated_title, $str_template); 
echo $parsed; 
+0

私は '$ str_template'が最後のパラメータであるべきだと思います。 – Vlad

+0

申し訳ありませんが、別の投稿からそのコードをコピーしました。私はそれを自分で書いていませんでした。 $ str_templateは単なる配列なのでしょうか?最初の部分は値の配列、2番目の部分は置き換えたい 'キーワード'、3番目の部分は置き換えたい値ですか?それは最初の配列にどのように結びついていますか?最初の?の最後の配列部分。 –

+0

ように:$名前{nameis} $ nameis = 'フランク'はフランクエコーだろうか? –

関連する問題