0

最后我找到了得到我想要的解决方案。唯一的问题是 - 这是将帖子编号更改为链接帖子编号的最快和最好的方法吗?

顺便说一句:我在这个线程中寻求建议:带箭头的 PHP 正则表达式 (>>)

也许有人会发现这个脚本很有用。

$string = "Lorem lipsum >>86721678 texttexttexttexttext >>64356 >234234 9894823 text  gdsfs>>54353<br /><br />";

    preg_match_all('!\>\>\d+!', $string, $matches);
    $nowy = array();
    //getting each number modified
    for ($i=0;$i<count($matches[0]);$i++)
    {
        $nowy[$i] = "<a href=''><font color='red'>".$matches[0][$i]."</font></a>";
    }

    echo str_replace($matches[0], $nowy, $string);
4

2 回答 2

0

尝试这个:

<?php
$string = "Lorem lipsum >>86721678 texttexttexttexttext >>64356 >234234 9894823 text  gdsfs>>54353<br /><br />";

$string = preg_replace_callback("#>>\d+#", "replacewithlinks", $string);
function replacewithlinks($matches)
{

  return "<a href=''><font color='red'>".$matches[0]."</font></a>";
}
echo $string;
?>
于 2013-09-24T11:13:30.167 回答
0

只需快速测试,您的方法在我的计算机上平均使用 5.50746917725E-5 秒。

由于简单和更好的易读性,我对此进行了测试:

echo preg_replace('!\>\>\d+!', "<a href=''><font color='red'>$0</font></a>", $string);

它用了 3.00407409668E-5 秒,所以几乎是速度的两倍。


注意:您不应该关注此类操作的性能,除非您正在处理非常大的数据块。如果它不是人类明显的,那应该没问题。

在这种情况下,您应该关注可读性和逻辑,以及如果您将来需要,维护和修改此代码是多么容易,至少这是我的观点

此外,如果您想要更好的性能测试,请使用 for 循环将其全部包装起来,并循环 10000 次或您认为合适的任何内容,例如使用microtime()和/或memory_get_usage()

于 2013-09-24T11:13:40.147 回答