经过一番挖掘,我仍然没有接近这一点。
我有一个由这个php生成的HTML字符串......
这会删除所有多个空格。
例如,上面输出以下字符串,不包含其他节点,只是文本...
1 Lorem ipsum 1.1 Dolor sit amet, consectetur adipiscing elit. 1.2 Nulla non felis enim, a lacinia erat. 1.3 Donec ullamcorper feugiat lobortis. 1.4 Vivamus congue libero ut augue consectetur ultricies vitae eget quam. 2 Suspendisse 2.1 Ultrices volutpat tempus. 2.2 Aenean ullamcorper porta lacus, ut vehicula tortor dapibus hendrerit. 2.3 Proin condimentum est eget arcu mollis consequat. 2.4 Ut malesuada posuere lobortis. 2.5 Suspendisse gravida adipiscing nunc, et vehicula nunc tincidunt nec. 3 Tincidunt 3.1 Sed eget porta ligula. 3.2 Morbi vitae augue in eros tincidunt tincidunt consequat interdum dui. 3.3 Phasellus ante velit, venenatis et dignissim eu, semper vitae lectus. 3.4 Maecenas feugiat adipiscing tortor, non porttitor sem condimentum luctus. 3.5 Curabitur pharetra gravida ornare. 3.6 Donec tortor erat, posuere in ullamcorper eget, posuere sit amet purus. 3.7 Duis feugiat sollicitudin odio, ac molestie nulla elementum non. 4 Vestibulum 4.1 Tempor lectus sit amet purus condimentum nec condimentum dui viverra. 4.2 Duis sodales molestie fermentum. 4.3 Maecenas euismod, lacus ut ullamcorper condimentum, erat felis sodales lectus, a sodales ipsum lectus eu lorem. 4.3 Vivamus ac rhoncus est.
我试图找到找到所有数字(1,1.2,1.3等)并将它们包裹在一个范围内。
我试过php,但我运气不好......
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream");
$newphrase = str_replace($healthy, "<span>".$yummy."</span>", $phrase);
echo $newphrase;
以上php正在输出此... You should eat Array, Array, and Array every day.
所以我想我可以试试jquery,但我不确定我是否正确接近它,请我的代码......
var points = [' 1 ',' 1.1 ',' 1.2 ',' 1.3 ',' 1.4 ',' 2 '];
$("p").html(this.html().replace( points,'<span>' + points + '</span>'));
我认为我偏离了轨道,但我真的找不到针对特定位字符串的针脚。
我制作了一个jQuery的小提琴...... http://jsfiddle.net/XmU6p/
我想在同一时间,我仍然会继续追求这个问题。但如果有人可以请一些关于我哪里出错的指示,我将非常感激。感谢
答案 0 :(得分:2)
在这两种情况下,您都需要实际循环遍历值数组并对每个值进行替换。我不太熟悉PHP,所以我用jQuery做了一个例子。试试这个:
var points = [' 1 ',' 1.1 ',' 1.2 ',' 1.3 ',' 1.4 ',' 2 '];
$.each(points, function(i, val) {
var $p = $('p');
$p.html($p.html().replace(val, '<span>' + val + '</span>'));
});
答案 1 :(得分:2)
您也可以在PHP中执行此操作。你有一个数组到字符串转换("<span>$yummy</span>"
)。您需要遍历$yummy
以添加跨度:
array_walk($yummy, function ($elem) { return "<span>$elem</span>"; });
然后你可以这样做:
$newphrase = str_replace($healthy, $yummy, $phrase);
答案 2 :(得分:0)
foreach ($healthy as $key => $food) {
$newphrase = str_replace($food,'<span>'.$yummy[$key].'</span>',$phrase);
}
echo $newphrase;
答案 3 :(得分:0)
在PHP中你不需要循环或遍历,你可以使用str_replace或preg_replace,它们都可以处理数组:
<?php
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$yummy = array("<span>pizza</span>", "<span>beer</span>", "<span>ice cream</span>");
// regex variant...
$healthy = array('/fruits/i', '/vegetables/i', '/fiber/i');
$newphrase = preg_replace($healthy, $yummy, $phrase);
echo $newphrase;
// string variant...
$healthy = array('fruits', 'vegetables', 'fiber');
$newphrase = str_replace($healthy, $yummy, $phrase);
echo $newphrase;
?>
我更喜欢正则表达式变体(preg_replace),以便在匹配方面有更多的灵活性。
答案 4 :(得分:0)
PHP示例失败的原因是$yummy
是一个数组,但"<span>"
是一个字符串。因此,行"<span>".$yummy."</span>"
将数组转换为字符串"Array"
,然后将其他字符串添加到它的任一侧,并将其作为单个字符串返回。
由于你想要的是一个给str_replace
的数组,你需要构造一个包含{{1}的新数组(例如使用foreach
循环或array_map()
) }和"<span>"
围绕每个元素 - 最终产生类似"</span>"
另一种方法是使用preg_replace_callback()
,使用添加$yummyWithSpan = array("<span>pizza</span>", "<span>beer</span>", "<span>ice cream</span>");
和"<span>"
的回调函数,但是您需要了解正则表达式的工作原理,可能是也可能不是你想要进入的东西。
答案 5 :(得分:0)
PHP:
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream");
foreach ($healthy as $key => $value) {
$phrase = str_replace($value, "<span>".$yummy[$key]."</span>",$phrase);
}
echo $phrase;
输出:
You should eat <span>pizza</span>, <span>beer</span>, and <span>ice cream</span> every day.