php замена ключей внутри строки

У меня есть массив ключей и средняя / длинная строка. Мне нужно заменить только максимум 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 ответа

Не совсем понял, что вам нужно, но вы можете сделать что-то вроде:

$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." "; }
}

Таким образом, вы можете использовать такой фрагмент. Я рекомендую вам обновить этот код, используя чистые классы вместо таких вещей, как 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>';    
}
Другие вопросы по тегам