检查数组中的每个项目是否为字符串,并将这些项目与一些html一起替换

时间:2015-04-20 13:07:05

标签: php arrays mysqli

我有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:

&#13;
&#13;
<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;
&#13;
&#13;

如何获得

&#13;
&#13;
<a href="#">Abu bakkar siddique</a> and <a href="#">Kim hon tae</a> meets the same result
&#13;
&#13;
&#13;

提前致谢...

2 个答案:

答案 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