gpt4 book ai didi

php - 自动添加指向关键字字符串的链接

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:16 24 4
gpt4 key购买 nike

在我的文章中,我想自动添加指向关键字的链接。我的关键字数组:

 $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);

像这样:只是一个测试:getName testName
非常import:如果字符串没有空格,则不会匹配。因为我会用其他语言,句子不会像英文那样有空格。点赞Wordpress关键词自动链接

我觉得我的代码还不够完善,有没有更好的算法来实现这个功能?谢谢!

最佳答案

您可以使用 array_reducepreg_replace用相应的 url 值替换字符串中所有出现的 slug 词:

$keywords = [
0=>['id'=>1,'slug'=>'getName','url'=>'https://www.getname.com'],
1=>['id'=>2,'slug'=>'testName','url'=>'https://www.testname.com'],
2=>['id'=>3,'slug'=>'ign','url'=>'https://www.ign.com'],
];
$str = "<p>Just a test: getName testName";
echo array_reduce($keywords, function ($c, $v) { return preg_replace('/\\b(' . $v['slug'] . ')\\b/', $v['url'], $c); }, $str);

输出:

<p>Just a test: https://www.getname.com https://www.testname.com

Demo on 3v4l.org

更新

要将文本变成链接,你需要使用这个:

echo array_reduce($keywords, 
function ($c, $v) {
return preg_replace('/\\b(' . $v['slug'] . ')\\b/',
'<a href="'. $v['url'] . '">$1</a>', $c);
},
$str);

输出:

<p>Just a test: <a href="https://www.getname.com">getName</a> <a href="https://www.testname.com">testName</a>

Updated demo

更新 2

因为一些被替换的链接包含的单词也是 slug 的值,所以有必要使用 strtr 的数组格式一次完成所有替换。 .我们使用 array_column 构建了一系列模式和替换, array_combinearray_map ,然后将其传递给 strtr:

$reps = array_combine(array_column($keywords, 'slug'),
array_map(function ($k) { return '<a href="' . $k['url'] .'">' . $k['slug'] . '</a>'; }, $keywords
));
$newstr = strtr($str, $reps);

New demo

关于php - 自动添加指向关键字字符串的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52943667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com