我的脚本出现问题重复 .html 文件的输出。 这是我的代码。
PHP:
<?php
$html = file_exists('try.html') ? file_get_contents('try.html') : die('unable to open the file');
$data['test1'] = 'WRITE 1';
$data['test2'] = 'WRITE 2';
foreach ($data as $search => $value)
{
if(preg_match_all('#(<([a-zA-Z]+)[^>]*id=")(.*'.$search.')("[^>]*>)([^<]*?)(</\\2>)#ism', $html, $matches, PREG_SET_ORDER))
{
foreach($matches as $match)
{
$xhtml = str_replace($match[5],$value,$html);
echo $xhtml;
}
}
}
?>
HTML:
<html>
<head>
<title>TRY</title>
</head>
<body>
<div id="test1">A</div>
<div id="test2">B</div>
</body>
</html>
输出:
WRITE 1
B
A
WRITE 2
它复制了输出。
期望的输出:
WRITE 1
WRITE 2
答案 0 :(得分:1)
你有这个作为你的foreach循环:
foreach($matches as $match)
{
$xhtml = str_replace($match[5],$value,$html);
echo $xhtml;
}
回声位于循环内部,因此每次都要进行一次替换,然后每次都回显$ xhtml。你想要的是这个:
<?php
$html = file_exists('try.html') ? file_get_contents('try.html') : die('unable to open the file');
$data['test1'] = 'WRITE 1';
$data['test2'] = 'WRITE 2';
foreach ($data as $search => $value)
{
if(preg_match_all('#(<([a-zA-Z]+)[^>]*id=")(.*'.$search.')("[^>]*>)([^<]*?)(</\\2>)#ism', $html, $matches, PREG_SET_ORDER))
{
foreach($matches as $match)
{
$html = str_replace($match[5],$value,$html);
}
}
}
echo $html;
?>