2011-03-31 26 views
1

OK我有2個文件,一個是index.php文件,另一個是file.html現在我想顯示通過HTML文件我的數組內容就像調用它,然後顯示這裏是代碼PHP數組和HTML

index.php: 

$var1 = 'text'; 

array('var' => $var1); 

include ('file.html'); 


file.html: 

<p>html {var} html</p> 

現在它沒有顯示文本我看到人們使用{}並調用密鑰並顯示其值我如何做到這一點?所有我想要的是通過HTML文件顯示我的價值不與回聲或使用PHP之間的HTML代碼打開密碼。

+0

你可以通過一些模板引擎例如Smarty。他們如何做,並可以使用模板引擎。他們已經爲你做了 – 2011-03-31 12:27:40

回答

0

如果你想更換標籤{name}$a = array('name' => 'value');珍惜你可以使用str_replace();

$filehtml = file_get_contents('file.html'); 
$array = array('var' => 'value'); 

foreach($array as $tag => $value) 
{ 
    $filehtml = str_replace('{'.$tag.'}', $value, $filehtml); 
} 

echo $filehtml; 

或者你用Smarty(或其他)。

-2

PHP不關心你包含哪些文件類型 - 它會像執行php文件一樣執行它們。所以.....

ndex.php: 

$var1 = 'text'; 

$myArr = array('var' => $var1); 

include ('file.html'); 


file.html: 

<p>html <?php print_r($myArr);?> html</p> 
+0

減去分數?大聲笑 - 剛剛回答了OP - 如果模板被要求,那麼我會擴大 - 你們是苛刻的;) – 2011-03-31 12:37:19

+0

請測試你的代碼,你會發現爲什麼downvotes。 – fabrik 2011-03-31 12:40:40

+0

html陣列 ( [var] =>文本 ) html

是輸出。如果他只想要$ var1,那麼只需echo $ var1或$ myArr ['var'] - 實際答案肯定沒有錯? – 2011-03-31 12:46:11

0

你所看到的我認爲是模板引擎或其他模板。使用模板時,(HTML)模板文件將在運行時解析,並且佔位符({var})將被替換爲其值。如果你對PHP模板引擎進行一些Google搜索,我相信你會明白它和/或找到一個現有的解決方案。

0

這絕對不是模板的方式,但這是一個粗略的片段,所以你明白了。

$var1 = 'text'; 
$tags = array('var' => $var1); 

$tpl = file_get_contents('file.html'); 

foreach($tags as $label => $data) { 
    $tpl = str_replace('{' . $label . '}', $data, $tpl); 
} 

echo $tpl; 
+0

有很多變數的不好的方法 – 2011-03-31 12:33:33

+0

您的代碼是錯誤的原因,只能在您的循環中停用1個標記可以更改。 – Robik 2011-03-31 12:34:03

+0

@Shakti Singh沒有人說這是最終的模板系統,但比原來的IMO更好。 – fabrik 2011-03-31 12:35:20

0

您可以使用extract(),只是要注意碰撞!

的index.php

$var1 = 'text'; 

$variabbles = array('var' => $var1); 
extract ($variables); 
include ('file.html'); 

file.html:

<p>html <?php echo $var; ?> html</p> 
+0

HTML文件無法解析PHP變量 – 2011-03-31 12:32:58

+0

@Shakti - 這將起作用:如果使用include(),它將被視爲PHP代碼,即使文件名是.html。也就是說,我不確定我是否同意使用'extract()來實現這個想法。有幾種更好的方法來做到這一點。 – Spudley 2011-03-31 12:35:51

+0

上面的代碼工作。低調回答沒有真正的理由是明顯不合理的。 – 2011-03-31 12:35:58

0

這聽起來像你想,使其更容易與HTML工作,而不必具有嵌入了PHP代碼。這將使用模板語言完成。

有許多模板語言可用於PHP;最知名的是Smarty

但是,我會告誡你,如果你的頁面有任何複雜性,你將需要某種程序代碼。 Smarty和其他人允許你創建循環和條件,但如果這樣使用,它可以很快成爲一種編程語言。另外它們會增加相當多的處理開銷,這是非常不必要的。

底線是,對於大多數用途來說,只需堅持使用標準PHP標記將變量打印到HTML代碼中就更簡單了。

參見前面的回答我給了一個類似的問題:Dirt-simple PHP templates... can this work without `eval`?

0

如果你不想使用模板引擎這個任務,我可以建議將下面的代碼添加到您的index.php:

<?php 
$var1 = 'text'; 

$templateVars = array('var' => $var1); 

$content = file_get_contents('file.html'); 

foreach($templateVars as $tplVar => $tplVarContent) { 
    $content = preg_replace('/\{' . $tplVar . '\}/', $tplVarContent, $content); 
} 

echo $content; 

爲什麼使用preg_replace()

據瞭解,preg_replace()在更換一個更大的文本內容,而不是str_replace()它開始是每次更換後慢做一個更好的工作(你可以找到關於谷歌的標杆,我似乎無法找到它現在)

後來編輯:

我發現這個上午一點改進。

<?php 
$var1 = 'test'; 

$templateVars = array('var' => $var1); 

$content = file_get_contents('tpl.tpl'); 

$content = preg_replace('/\{([a-zA-Z0-9_]+)\}/e', "\$templateVars['\\1']", $content); 

echo $content; 

我也對str_replace()解決方案做了一些測試。 str_replace()更快只有當有幾個變量(2-3)。有6個變量preg_replace()快2倍

這裏是我的結果:

preg_replace() 10000 times: 0.038811922073364seconds 
str_replace() 10000 times: 0.085460901260376seconds 

這是我跑測試速度的代碼:

<?php 
$var1 = 'text'; 

$templateVars = array('var' => $var1, 'var1' => 'blabla', 'var3' => 'variable3', 'var22' => $var1, 'var133' => 'blabla', 'var3444' => 'variable3'); 

$content = file_get_contents('tpl.tpl'); 


$start = microtime(true); 
for($i = 0; $i <= 9999; $i++) 
{ 
    $content = preg_replace('/\{([a-zA-Z0-9_]+)\}/e', "\$templateVars['\\1']", $content); 
} 

$end = microtime(true); 

echo 'preg_replace() '. $i . ' times: ' . ($end - $start) . 'seconds<br>'; 


$start = microtime(true); 
for($i = 0; $i <= 9999; $i++) 
{ 
    foreach($templateVars as $tplVar => $tplVarContent) { 
     $content = str_replace('{' . $tplVar . '}', $tplVarContent, $content); 
    } 
} 
$end = microtime(true); 

echo 'str_replace() '. $i . ' times: ' . ($end - $start) . 'seconds<br>'; 
0

您可以使用輸出緩存來解決你的問題,但要小心的報價,如果你只使用PHP來輸出它。