在循环中获取值并在 PHP 中将其替换为字符串一次

Getting value in loop and replace it in string once in PHP

从内部循环获取值后,我试图从内部字符串中查找并替换我的值。 当我从内部循环替换我的字符串时(该方法不合适),因为它一个接一个地替换,直到循环结束,我得到很多字符串,每个字符串都有一个替换。 我试图用外部循环值替换整个字符串一次。 这是我的代码。

$str = "wi are checking it";   
$langs = array ('w', 'c', 'i');
foreach ($langs as $lang) {
    $search = $lang;  
    $url[] = "<span style='color:red;'>".$search."</span>";
    $qw[] = $search;
}
$op = implode("", $url);
$er = implode("", $qw);
echo $op."<br>";
echo $er."<br>";
$new = str_replace($er, $op, $str);
echo $new;

输出:

预期输出:

[

你可以试试这个方法

$youText  = "wi are checking it";
$find     = ["wi", "it"];
$replace  = ["we", "its"];
$result   = str_replace($find, $replace, $youText);
echo $result;

你可以使用preg_replace函数:-

<?php

$str = "wi are checking it";   
$langs = array ('w', 'i');

$pattern = array();
$htm = array();


for ($i = 0; $i < count($langs) ; $i++) {
    $pattern[$i] = "/".$langs[$i]."/";
    $htm[$i] = "<span style='color:red;'>".$langs[$i]."</span>";
}

$limit = -1;
$count = 0;

$new = preg_replace($pattern, $htm, $str, $limit, $count);

#echo htmlspecialchars($str)."<br>";
echo ($new);
    
?>

您需要的结果:-

<span style='color:red;'>w</span><span style='color:red;'>i</span> are checking it

抱歉,您不能替换 'c' 字符,因为替换字符串还包含 'c' 字符(即 ...style = "color:red" 中的 c),所以此函数 re-replace 此 'c' char 并生成一个有问题的字符串...

自行修复此错误 供参考read this

Non-regex方式:

为您的 lang 个字符创建哈希图,并逐个字符地循环您的字符串。如果在地图中设置了当前字符,则添加那些 span 标签,否则只附加当前字符。

<?php

$str = "we are checking it";   
$langs = array ('w', 'c', 'i');
$lang_map = array_flip($langs);

$new_str = "";

for($i = 0; $i < strlen($str); ++$i){
    if(isset($lang_map[ $str[$i] ])){
        $new_str .= "<span style='color:red;'>".$str[$i]."</span>";
    }else{
        $new_str .= $str[$i];
    }
}

echo $new_str;

Online Demo

正则表达式方式:

您可以使用 preg_replace 来替换 lang 中被如下 span 标签包围的每个字符:

<?php

$str = "we are checking it";   
$langs = array ('w', 'c', 'i');
$lang_regex = preg_quote(implode("", $langs));

$str = preg_replace("/[$lang_regex]/", "<span style='color:red;'>[=11=]</span>", $str);

echo $str;

Online Demo