通过对应数组搜索和替换链接

时间:2017-04-21 09:31:32

标签: php regex search replace domdocument

我想根据对应数组搜索和替换链接。

我写了这个解决方案,但我发现它有点简单,可能没有足够的效率来处理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;

?>

1 个答案:

答案 0 :(得分:1)

这种方法效率不高,但只要你只做一次并存储结果就应该没问题。鉴于您已经以这种方式实现了它,除非遇到实际的性能问题,否则应该使用它。

如果你试图在运行时这样做(即每次服务时都修改页面)那么,是的,这可能会有问题。每页15000次字符串搜索可能会很慢。

在这种情况下,最明显的变化是这个答案隐含的变化:做一次并保存结果,而不是在运行时计算它。

如果必须在运行时执行此操作,那么最佳解决方案将使用DOMDocument来获取URL。然后,如果可能,您可以根据一组规则替换它(例如,如果/old/Pages/总是被转换为/new/en/previous-exercizes,那么为此实现逻辑)。或者,如果您必须单独编码每个路径,则可以使用键入旧URL的字典来获取新URL。