2011-03-31 5 views
1

OK 내가 하나의 index.php이고 다른 하나는 지금 내가 그것을 호출하고 여기에 표시처럼 그 html 파일을 통해 내 배열 내용을 표시 할 file.html과 인 코드PHP 배열 및 HTML

index.php: 

$var1 = 'text'; 

array('var' => $var1); 

include ('file.html'); 


file.html: 

<p>html {var} html</p> 
에게 있습니다이 개 파일이

이제 텍스트가 표시되지 않습니다. 사람들이 {}을 (를) 사용하고 키를 호출하여 그 값을 표시하는 것을 보았습니다. 어떻게해야합니까? 모두 내가 원하는 에코와 HTML 파일을 통해 내 값을 표시하거나 HTML 코드 사이에 PHP를 닫기 코드를 사용하여 표시됩니다.

+0

예를 들어 Smarty와 같은 일부 템플릿 엔진을 통과 할 수 있습니다. 그들은 어떻게하고 있으며 대신 템플릿 엔진을 사용할 수 있습니다. 그들은 이미 당신을 위해 그것을했습니다 –

답변

0

당신은 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 파일처럼 PHP를 실행합니다. 그래서 .....

ndex.php: 

$var1 = 'text'; 

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

include ('file.html'); 


file.html: 

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

빼기 점수 ???? 롤 - 방금 OP에 대답 - 템플릿 경우 그랬다면 내가 확장했을거야 - 당신들은 가혹한;) –

+0

코드를 테스트하시기 바랍니다 왜 downvotes 알아보십시오. – fabrik

+0

html 배열 ( [var] => 텍스트 ) html

이 출력됩니다. 그가 단지 $ var1을 원한다면 그냥 $ var1 또는 $ myArr [ 'var']을 echo합니다. 실제 응답에는 틀린 것이 없습니다 ???? –

0

PHP는 {var} 문과 관련하여 아무 것도하지 않습니다. 수동으로 작업해야합니다 ... 예를 들어 템플릿 엔진 http://www.smarty.net/에 대해 읽어야합니다.

0

당신이 본 것은 템플릿 엔진이나 다른 템플릿의 템플릿이라고 생각했습니다. 템플릿을 사용하면 런타임에 (HTML) 템플릿 파일이 파싱되고 자리 표시 자 ({var})는 해당 값으로 바뀝니다. 당신이 PHP 템플릿 엔진에 대한 구글 주위에 있다면 나는 당신이 그것에 대한 아이디어를 얻고/사용할 수있는 기존 솔루션을 찾을 것이라고 확신합니다. 당신이 $a = array('name' => 'value');과 가치를 태그 {name}을 바꾸려면

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

변수가 많은 빈약 한 메소드 –

+0

코드가 틀리면 루프에서 오목 할 수 있습니다. 단 하나의 태그 만 변경할 수 있습니다. – Robik

+0

@Shakti Singh 아무도 이것이 최고의 템플릿 시스템이지만 원래의 IMO보다 훨씬 훌륭하다고 말한 사람은 없습니다. – fabrik

0

extract()을 사용할 수 있습니다. 충돌에 유의하십시오.

index.php를

$var1 = 'text'; 

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

file.html과 :

당신이 그것을에 포함 된 PHP 코드가 필요없이 HTML로 작업하기 쉽도록 할 것 소리
<p>html <?php echo $var; ?> html</p> 
+0

HTML 파일은 PHP 변수를 해석 할 수 없습니다. –

+0

@Shakti -이 방법은 작동합니다 :'include()'를 사용하면 파일 이름이 .html 인 경우에도 PHP 코드로 취급됩니다. 즉, 나는 이것을 달성하기 위해'extract() '를 사용하는 것에 동의 할 것인지 확신하지 못한다. 몇 가지 더 좋은 방법이 있습니다. – Spudley

+0

위의 코드가 작동합니다. 진정한 이유없이 대답을 하향 투표하는 것은 단순한 일이 아닙니다. –

0

. 이것은 템플릿 언어를 사용하여 수행됩니다.

PHP에서 사용할 수있는 여러 가지 템플릿 언어가 있습니다. 가장 잘 알려진 것은 Smarty입니다.

그러나 페이지에 어떤 종류의 복잡성이있는 경우 프로그램 코드가 필요합니다. Smarty 및 기타 사용자는 루프 및 조건을 수행 할 수 있지만 이와 같이 사용하면 매우 빠르게 자체적으로 프로그래밍 언어가 될 수 있습니다. 또한 이들은 처리 오버 헤드를 상당히 추가합니다. 이는 실제로 불필요합니다.

결론은 대부분의 경우 HTML 코드에 변수를 인쇄하기위한 표준 PHP 태그를 사용하는 것이 더 쉽습니다.

참조 또한 내가 비슷한 질문에 준 이전의 대답 :이 작업의 템플릿 엔진을 사용하지 않으려면 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()보다 더 큰 텍스트 내용에 교체에서 더 나은 일을하는 것이 알려져

(Google에서 벤치 마크를 찾을 수 있습니다, 나는 그것을 찾을 수 없습니다 지금)

나중에 편집 :

나는이 일에 오전 향상을 발견했다.

<?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 만 사용하여 출력하십시오.