避免PHP中的重复输出

时间:2013-11-16 06:50:24

标签: php duplicates output

我的脚本出现问题重复 .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

1 个答案:

答案 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;
?>