使用以下数组中的关键字列表:
$keywordlist = array(
'Apple iPhone' => 'http://www.example.com/apple/iphone/',
'Apple iPad' => 'http://www.example.com/apple/ipad',
'Samsung Galaxy Ace' => 'http://www.example.com/samsung/galaxy-ace',
'Samsung Galaxy Nexus' => 'http://www.example.com/samsung/galaxy-nexus',
'Samsung' => 'http://www.example.com/samsung/',
'Apple' => 'http://www.example.com/apple/'
);
我想将关键字替换为与其关联的网址。
我已尝试循环浏览它们并使用str_replace
和preg_replace
,但这会取代所有关键字中的制造商名称,因此所有关键字都会转换为仅用于“三星”和“三星”的链接苹果'。我有点难过接下来要去哪里,有人有任何指针吗?
修改
我使用下面的代码循环 -
foreach($keywordlist as $name => $link){
$content = str_replace($name, '<a href="'.$link.'">'.$name.'</a>', $content);
}
解决方案:
我认为问题是我要替换的链接文本。然后它被其他具有相似关键词的短语再次替换,我已经得到了以下工作。
有人想过更好的方法吗?
$content = "<p>This Apple iPhone is from Apple</p>
<p>This Apple iPad is from Apple</p>
<p>This Samsung Galaxy Ace is from Samsung</p>
<p>This Samsung Galaxy Nexus is from Samsung</p>
<p>This is a Samsung</p>
<p>This is an Apple</p>";
$keywordlist = array(
'Apple iPhone' => '[1]',
'Apple iPad' => '[2]',
'Samsung Galaxy Ace' => '[3]',
'Samsung Galaxy Nexus' => '[4]',
'Samsung' => '[5]',
'Apple' => '[6]'
);
$content = str_replace(array_keys($keywordlist), array_values($keywordlist), $content);
$urllist = array(
'[1]' => '<a href="http://www.example.com/apple/iphone/">Apple iPhone</a>',
'[2]' => '<a href="http://www.example.com/apple/ipad">Apple iPad</a>',
'[3]' => '<a href="http://www.example.com/samsung/galaxy-ace">Samsung Galaxy Ace</a>',
'[4]' => '<a href="http://www.example.com/samsung/galaxy-nexus">Samsung Galaxy Nexus</a>',
'[5]' => '<a href="http://www.example.com/samsung/">Samsung</a>',
'[6]' => '<a href="http://www.example.com/apple/">Apple</a>'
);
$content = str_replace(array_keys($urllist), array_values($urllist), $content);
echo $content;
输出:
此Samsung Galaxy Nexus来自Samsung
这是Samsung
这是Apple
答案 0 :(得分:1)
str_replace()
应该足以满足您的目的。
foreach($keywordlist as $key => $link) {
$content = str_replace($key, '<a href="$link">$key</a>', $content);
}
正如我所评论的那样,由于密钥上重复出现重复的关键字,这将无法按预期工作。
您需要使用固定格式来表示密钥。我建议的那个是[Apple]
和[Apple iPad]
。当您实现类似于此的内容时,每个关键字都会有所不同,尽管它们内部包含相同的内部代码。
在病房之后,您更新的关键字结构会显示一些内容。
$keywordlist = array(
'[Apple iPhone]' => 'http://www.example.com/apple/iphone/',
'[Apple iPad]' => 'http://www.example.com/apple/ipad',
'[Samsung Galaxy Ace]' => 'http://www.example.com/samsung/galaxy-ace',
'[Samsung Galaxy Nexus]' => 'http://www.example.com/samsung/galaxy-nexus',
'[Samsung]' => 'http://www.example.com/samsung/',
'[Apple]' => 'http://www.example.com/apple/'
);
如果这样,选项不可行,因为这会在开发内容时显着增加复杂性,因为需要用[]
包装每个关键字文本。
答案 1 :(得分:0)
这对我来说听起来有点无用,因为你拥有与价值相同的钥匙。也许我误解了你的意图。 但是在这里你去:这使得键与值(url's)相同
$newkeywordlist = array_combine (array_values($keywordlist),array_values($keywordlist));
答案 2 :(得分:0)
你可以用这个:
$s = "this is a test";
$arr = array(
"this" => "THIS",
"a" => "A"
);
echo str_replace(array_keys($arr), array_values($arr),$s);
输出:
THIS is A test