1

使用如下数组中的关键字列表:

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

我想用与它们关联的 URL 替换关键字。

我尝试遍历它们并使用str_replaceand 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;

输出:

这款Apple iPhone来自Apple

这款Apple iPad来自Apple

这款三星 Galaxy Ace来自三星

这款三星 Galaxy Nexus来自三星

这是三星

这是一个苹果

4

3 回答 3

1

str_replace()应该足以满足您的尝试。

foreach($keywordlist as $key => $link) {
     $content = str_replace($key, '<a href="$link">$key</a>', $content);
}

正如我所评论的那样,由于键上重复的重复关键字,这将无法按预期工作。

您需要有一个固定的格式来表示一个键。我建议的一个类似于[Apple]and [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/'
);

如果是这样,则选项不可行,因为这会显着增加开发内容时的复杂性,因为需要用[].

于 2012-07-09T09:20:42.657 回答
0

这对我来说听起来有点没用,因为您拥有与值相同的键。也许我误解了你的意图。但是你去:这使得键与值(url)相同

$newkeywordlist = array_combine (array_values($keywordlist),array_values($keywordlist));

http://nl.php.net/manual/en/function.array-combine.php

http://nl.php.net/manual/en/function.array-values.php

于 2012-07-09T09:22:28.610 回答
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
于 2012-07-09T09:32:08.797 回答