php替换字符串中的键

时间:2012-02-16 09:36:44

标签: php replace

我有一组键和一个中/长字符串。 我只需要用链接包含的相同键替换我在本文中找到的最多2个键。 感谢。

例如:

$aKeys   = array();
$aKeys[] = "beautiful";
$aKeys[] = "text";
$aKeys[] = "awesome";
...

$aLink   = array();
$aLink[] = "http://www.domain1.com";
$aLink[] = "http://www.domain2.com";

$myText = "This is my beautiful awesome text";


should became "This is my <a href='http://www.domain1.com'>beautiful</a> awesome <a href='http://www.domain2.com'>text</a>";

2 个答案:

答案 0 :(得分:1)

不要真正理解你的需要,但你可以做一些事情:

$aText = explode(" ", $myText);
$iUsedDomain = 0;
foreach($aText as $sWord){      
    if(in_array($sWord, $aKeys) and $iUsedDomain < 2){
        echo "<a href='".$aLink[$iUsedDomain++]."'>".$sWord."</a> ";
    }
    else{ echo $sWord." "; }
}

答案 1 :(得分:0)

所以,你可以使用这样的代码片段。我建议您使用干净的类而不是global之类的东西来更新此代码 - 只是用它来向您展示如何用更少的代码解决这个问题。

// 2 is the number of allowed replacements
echo preg_replace_callback('!('.implode('|', $aKeys).')!', 'yourCallbackFunction', $myText, 2);

function yourCallbackFunction ($matches)
{
    // Get the link array defined outside of this function (NOT recommended)
    global $aLink;

    // Buffer the url
    $url = $aLink[0];

    // Do this to reset the indexes of your aray
    unset($aLink[0]);
    $aLink = array_merge($aLink);

    // Do the replace
    return '<a href="'.$url.'">'.$matches[1].'</a>';    
}