我想根据对应数组搜索和替换链接。
我写了这个解决方案,但我发现它有点简单,可能没有足够的效率来处理2000页和15000个链接。你怎么看?使用DOMDocument或regex会更有效吗?谢谢你的回答。
$correspondences = array(
"old/exercise-2017.aspx" => "/new/exercise2017.aspx",
"old/exercise-2016.aspx" => "/new/exercise2016.aspx",
"old/Pages/index.aspx" => "/new/en/previous-exercises/index.aspx"
);
$html = '<ul><li><a href="old/exercise-2017.aspx">Appraisal exercise 2017</a></li><li><a href="old/exercise-2016.aspx">Appraisal exercise 2016</a></li><li> <a href="old/Pages/index.aspx">Previous appraisal exercises</a></li></ul>';
foreach($correspondences as $key => $value) {
if(strpos($html, $key)) {
$html = str_replace($key, $value, $html);
}
}
echo $html;
?>
答案 0 :(得分:1)
这种方法效率不高,但只要你只做一次并存储结果就应该没问题。鉴于您已经以这种方式实现了它,除非遇到实际的性能问题,否则应该使用它。
如果你试图在运行时这样做(即每次服务时都修改页面)那么,是的,这可能会有问题。每页15000次字符串搜索可能会很慢。
在这种情况下,最明显的变化是这个答案隐含的变化:做一次并保存结果,而不是在运行时计算它。
如果必须在运行时执行此操作,那么最佳解决方案将使用DOMDocument
来获取URL。然后,如果可能,您可以根据一组规则替换它(例如,如果/old/Pages/
总是被转换为/new/en/previous-exercizes
,那么为此实现逻辑)。或者,如果您必须单独编码每个路径,则可以使用键入旧URL的字典来获取新URL。