我有mysqli名字数组
$names=$row['names']; // in the column names , i have "Abu bakkar siddique,Kim hon tae"
和一个字符串
$string='Abu bakkar siddique and Kim hon tae meets the same result';
爆炸之后我得到了喜欢
$nameEx=explode(',', $names);
foreach($nameEx as $name){
if (strpos($string, $name)) {
$new[]=str_replace($name,'<a href="#">'.$name.'</a>', $string);
}
}
$results = implode(", ",$new);
echo $results;
Out is:
<a href="#">Abu bakkar siddique</a> and Kim hon tae meets the same result, Abu bakkar siddique and <a href="#">Kim hon tae</a> meets the same result
&#13;
如何获得
<a href="#">Abu bakkar siddique</a> and <a href="#">Kim hon tae</a> meets the same result
&#13;
提前致谢...
答案 0 :(得分:3)
试试这个:
foreach($nameEx as $name){
if (strpos($string, $name) !== false) {
$string=str_replace($name,'<a href="#">'.$name.'</a>', $string);
}
}
echo $string;
您可以将每个名称替换一次。
此外,您需要检查strpos是否返回0(第一次出现的位置)或false(不出现)。在您的示例中,第一个名称不会被替换,因为strpos将返回0并且if语句将通过此迭代。
<强>更新强>
它不是很漂亮但它有效。首先,您获取名称并按长度排序。然后,用“标记”替换名称。最后用你的实际字符串替换标记。
$names = "Abu bakkar,Abu bakkar siddique,Kim hon tae";
$string = "Abu bakkar siddique, Abu bakkar and Kim hon tae meets the same result. Abu bakkar is name for test";
$nameEx = explode(',', $names);
usort($nameEx, function($a, $b) {
if (strlen($a) < strlen($b)) { return 1; } elseif (strlen($a) == strlen($b)) { return 0; } else { return -1; }
});
foreach($nameEx as $key => $name) {
$string = str_replace($name, "#".$key."#", $string);
}
foreach($nameEx as $key => $name) {
$string = str_replace("#".$key."#", "<a href='#'>".$name.'</a>', $string);
}
echo $string;
答案 1 :(得分:1)
你可以这样做:
foreach($nameEx as $name){
if (strpos($string, $name) !== false) {
$string=str_replace($name,'<a href="#">'.$name.'</a>', $string);
}
}
echo $string;
但是如果名称包含其他名称,请注意这样的方法...例如,如果一个人的名字是Abu bakkar
而另一个名字是Abu bakkar siddique