Php 如何在将单词搜索到字符串后找到位置,然后标记此位置

Php 如何在将单词搜索到字符串后找到位置,然后标记此位置,php,arrays,Php,Arrays,我将在字符串中找到所需的单词,然后显示标记或高亮显示 $str = "this is a test for testing a test function"; $array = explode(' ',$str); $key = array_search('tes', $array); $tr=''; foreach($array as $i=>$ar){ if($key == $i){ $tr .= '<a style="color:red">'.

我将在字符串中找到所需的单词,然后显示标记或高亮显示

$str = "this is a test for testing a test function";

$array = explode(' ',$str);
$key = array_search('tes', $array);

$tr='';
foreach($array as $i=>$ar){
    if($key == $i){
        $tr .= '<a style="color:red">'.$ar.'</a> '; 
    }else{
        $tr .= $ar.' ';     
    }
}
echo $tr;//this is a <a style="color:red">test</a> for <a style="color:red">testing</a> a <a style="color:red">test</a> function
$str=“这是一个测试函数的测试”;
$array=explode(“”,$str);
$key=array\u search('tes',$array);
$tr='';
foreach($i=>$ar的数组){
如果($key==$i){
$tr.=''.$ar.';
}否则{
$tr.=$ar.';
}
}
echo$tr//这是用于测试测试函数的测试
搜索->“tes”

查找后回声->这是一个“测试”的“测试”一个“测试”功能似乎很复杂。您不必拆分整个文本来进行替换:

$str = "this is a test for testing a test function";
$search = "tes";
echo str_replace($search, "<strong>$search</strong>", $str);
$str=“这是一个测试函数的测试”;
$search=“tes”;
echo str_替换($search,“$search”,$str);
如果您只想搜索整个单词,正则表达式可能会帮助您:

$search = "test";
$regex = "~\b(" . preg_quote($search, '~') . ")\b~";
echo preg_replace($regex, "<strong>$1</strong>", $str);
$search=“test”;
$regex=“~\b”(.preg_quote($search,“~”))”\b~”;
echo preg_替换($regex,“$1”,$str);
您可以尝试以下方法:

 $str = "this is a test for testing a test function";        
    function search_array($array, $term)
    {
        $keys=array();
        foreach ($array AS $key => $value) {
            if (stristr($value, $term) === FALSE) {
                continue;
            } else {
                $keys[]=$key;
            }
        }
        return $keys;
    }

   $array = explode(' ',$str);
    $term="tes";
    $data=search_array($array, $term); //get keys
    $tr='';
    foreach($array as $i=>$ar){
        if(in_array($i,$data)){//if avialable
            $tr .= '<a style="color:red">'.$ar.'</a> '; 
        }else{
            $tr .= $ar.' ';     
        }
    }
    echo $tr;
$str=“这是一个测试函数的测试”;
函数搜索\u数组($array,$term)
{
$keys=array();
foreach($key=>$value的数组){
if(stristr($value,$term)==FALSE){
继续;
}否则{
$keys[]=$key;
}
}
返回$keys;
}
$array=explode(“”,$str);
$term=“tes”;
$data=搜索数组($array,$term)//拿到钥匙
$tr='';
foreach($i=>$ar的数组){
if(在数组中($i,$data)){//if可访问
$tr.='

$term=“测试测试”;
函数搜索\u数组($array,$term)
{       
$keys=array();
foreach($key=>$value的数组){
$term1=爆炸(“”,$term);
foreach($term1为$k=>$t){
if(stristr($value,$t)==FALSE){
继续;
}否则{
$keys[]=$key;
}
}
}
返回$keys;
}
$str=“这是一个用于测试测试函数的测试”;
$array=explode(“”,$str);
$data=search_数组($array,$term);//获取密钥
$tr='';
foreach($i=>$ar的数组){
if(在数组中($i,$data)){//if可访问
$tr.=''.$ar.';
}否则{
$tr.=$ar.';
}
}
echo$tr;

您的预期输出是什么?问题是什么?为什么不干脆
str_replace('tes','tes',$str)
?任何出现的
tes
都应该成为一个链接?(搜索->测试)(回声->这是“测试”功能的“测试”)这是一个更好的方法,我不认为OP想要单词边界。看起来
tes
只是介绍。我认为
(\S*tes\S*)
将是OP需要的。@user3445955您的预期输出是什么?@user3445955,因为在上述方法中,它们是不同的数组元素,而不是单个的。@user3445955如果字符串已修复,则可以使用。
$term="testing a test";
function search_array($array, $term)
{       
    $keys=array();
    foreach ($array AS $key => $value) {
        $term1 = explode(' ',$term);
        foreach ($term1 AS $k => $t) {
            if (stristr($value, $t) === FALSE) {
                continue;
            } else {
                $keys[]=$key;
            }
        }
    }

    return $keys;
}
$str = "this is a test for testing a test function"; 
$array = explode(' ',$str);
$data=search_array($array, $term); //get keys
$tr='';
foreach($array as $i=>$ar){
    if(in_array($i,$data)){//if avialable
        $tr .= '<a style="color:red">'.$ar.'</a> '; 
    }else{
        $tr .= $ar.' ';     
    }
}
echo $tr;