【发布时间】:2014-12-17 17:24:02
【问题描述】:
假设你有一个字符串
$str = "<img src='i12'><img src='i105'><img src='i12'><img src='i24'><img src='i15'>....";
是否可以用名为$arr 的数组的nth 值替换每个i+n
例如<img src='i12'> 被<img src='$arr[12]'> 替换。
【问题讨论】:
假设你有一个字符串
$str = "<img src='i12'><img src='i105'><img src='i12'><img src='i24'><img src='i15'>....";
是否可以用名为$arr 的数组的nth 值替换每个i+n
例如<img src='i12'> 被<img src='$arr[12]'> 替换。
【问题讨论】:
如果我是你,我会简单地解析标记,并相应地处理/更改它:
$dom = new DOMDocument;
$dom->loadHTML($str);//parse your markup string
$imgs = $dom->getElementsByTagName('img');//get all images
$cleanStr = '';//the result string
foreach($imgs as $img)
{
$img->setAttribute(
'src',
//get value of src, chop of first char (i)
//use that as index, optionally cast to int
$array[substr($img->getAttribute('src'), 1)]
);
$cleanStr .= $dom->saveXML($img);//get string representation of node
}
echo $cleanStr;//echoes new markup
现在在演示中,你会看到 src 属性被替换为$array[n] 之类的字符串,上面的代码会将值替换为数组的值...
【讨论】:
我会为此使用preg_replace:
$pattern="/(src=)'\w(\d+)'/";
$replacement = '${1}\'\$arr[$2]\'';
preg_replace($pattern, $replacement, $str);
$pattern="/(src=)'\w(\d+)'/";
src='letter + digits'这样的文本块。src= 和数字块,以便能够将它们打印回来。$replacement = '${1}\'\$arr[$2]\'';
php > $str = "<img src='i12'><img src='i105'><img src='i12'><img src='i24'><img src='i15'>....";
php > $pattern="/(src=)'\w(\d+)'/";
php > $replacement = '${1}\'\$arr[$2]\'';
php > echo preg_replace($pattern, $replacement, $str);
<img src='$arr[12]'><img src='$arr[105]'><img src='$arr[12]'><img src='$arr[24]'><img src='$arr[15]'>....
【讨论】: