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>';
}