增加<;td>;使用PHP按固定百分比标记

增加<;td>;使用PHP按固定百分比标记,php,html,string,Php,Html,String,我想使用php查找和更改多个价格。e、 g.所有数字增加/减少20% <table> <tr> <td>product name</td> <td>$88</td> </tr> <tr> <td>product name</td> <td>$98</td> </tr> <tr> <td>product name<

我想使用php查找和更改多个价格。e、 g.所有数字增加/减少20%

<table>
<tr>
<td>product name</td>
<td>$88</td>
</tr>
<tr>
<td>product name</td>
<td>$98</td>
</tr>
<tr>
<td>product name</td>
<td>$78</td>
</tr>
<tr>
<td>product name</td>
<td>$106</td>
</tr>
<tr>
<td>product name</td>
<td>$188</td>
</tr>
</table>
到目前为止我所尝试的:

我尝试使用一个函数获取
$
之间的字符串(价格编号),然后更改它:

function get_string_between($string, $start, $end){
    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}

但结果不是很好。我如何才能正确地实现这一点?

如果必须使用字符串函数而不是HTML DOM解析器,则可以使用:

$result=preg\u replace\u回调('#(\$)(\d+)()#',函数($match){
返回$match[1].$match[2]*1.20.$match[3];
},$html);

如果必须使用字符串函数而不是HTML DOM解析器,则可以使用:

$result=preg\u replace\u回调('#(\$)(\d+)()#',函数($match){
返回$match[1].$match[2]*1.20.$match[3];
},$html);

使用HTML解析器来实现这一点。下面是一个使用内置类的解决方案:


正则表达式
/\$(\d+)/
用于检查节点是否包含格式为
$

的值。使用HTML解析器可以实现这一点。下面是一个使用内置类的解决方案:


正则表达式
/\$(\d+)/
用于检查节点是否包含格式为
$

的值。请发布预期结果(以及您迄今为止尝试的结果)。不要使用字符串或regexp搜索HTML,请使用DOM解析器库。使用什么语言来执行此操作?您可以使用javascript或服务器语言(如php@JohnTaa:它是用PHP标记的,所以我假设OP想用PHP来做。如果是这种情况,请使用html dom解析器发布预期结果(以及您迄今为止尝试过的结果)。不要使用字符串或regexp搜索html,使用DOM解析器库。使用什么语言来实现?您可以使用javascript或服务器语言(如php@JohnTaa:它是用PHP标记的,所以我假设OP想用PHP来做。那么,如果是这样的话,您可以使用html domparser@jlee字体很高兴能帮上忙@很高兴能帮上忙!
function get_string_between($string, $start, $end){
    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}
$result = preg_replace_callback('#(<td>\$)(\d+)(</td>)#', function($match) {
    return $match[1] . $match[2]*1.20 . $match[3];
}, $html);
$percentage = 20;

$dom = new DOMDocument;
$dom->loadXML($html);
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;

foreach ($dom->getElementsByTagName('td') as $tag) {
    if (preg_match('/\$(\d+)/', strval($tag->nodeValue), $matches)) {
        $currVal = $matches[1];
        $newVal = $currVal + ($currVal * $percentage / 100);
        $tag->nodeValue = '$'. $newVal;
    }
}

echo $dom->saveHTML();