【发布时间】:2019-03-27 08:58:30
【问题描述】:
在我的文章中,我想自动添加指向关键字的链接。 我的关键字数组:
$keywords = [
0=>['id'=>1,'slug'=>'getName','url'=>'https://example.com/1'],
1=>['id'=>2,'slug'=>'testName','url'=>'https://example.com/2'],
2=>['id'=>3,'slug'=>'ign','url'=>'https://example.com/3'],
];
这是我的代码:
private function keywords_replace(string $string, array $key_array)
{
$array_first = $key_array;
$array_last = [];
foreach ($array_first as $key=>$value)
{
$array_last[$key] = [$key, $value['slug'], '<a target="_blank" href="' . $value['url'] . '" title="' . $value['slug'] . '">' . $value['slug'] . '</a>'];
}
$count = count($array_last);
for ($i=0; $i<$count;$i++)
{
for ($j=$count-1;$j>$i;$j--)
{
if (strlen($array_last[$j][1]) > strlen($array_last[$j-1][1]))
{
$tmp = $array_last[$j];
$array_last[$j] = $array_last[$j-1];
$array_last[$j-1] = $tmp;
}
}
}
$keys = $array_last;
foreach ($keys as $key)
{
$string = str_ireplace($key[1],$key[0],$string);
}
foreach ($keys as $key)
{
$string = str_ireplace($key[0],$key[2],$string);
}
return $string;
}
结果:
$str = "<p>Just a test: getName testName";
echo $this->keywords_replace($str,$keywords);
这样:只是测试:getNametestName
非常重要:如果字符串没有空格,则不匹配。因为我会使用其他语言,句子不会有空格像英语。喜欢 Wordpress 关键词自动链接
我觉得我的代码并不完美,有没有更好的算法来实现这个功能?谢谢!
【问题讨论】:
-
显示您期望的数组示例
-
我在输出后添加了效果。
-
你的蛞蝓大多是驼峰式,还是你关心不区分大小写?
-
我不关心小写和驼峰的大小写。