在循环中获取值并在 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;
正则表达式方式:
您可以使用 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;
从内部循环获取值后,我试图从内部字符串中查找并替换我的值。 当我从内部循环替换我的字符串时(该方法不合适),因为它一个接一个地替换,直到循环结束,我得到很多字符串,每个字符串都有一个替换。 我试图用外部循环值替换整个字符串一次。 这是我的代码。
$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;
正则表达式方式:
您可以使用 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;