我有两组数据存储在多维数组中。一个存储正则表达式,用于在较大的文本主体中查找整个单词:
Array
(
[red] => Array
(
[0] => ~'b(a)'b~i
[1] => ~'b(b)'b~i
[2] => ~'b(c)'b~i
)
[orange] => Array
(
[0] => ~'b(d)'b~i
)
[green] => Array
(
[0] => ~'b(e)'b~i
)
)
另一个包含替换匹配的内容:
Array
(
[red] => Array
(
[0] => <span class="red">A</span>
[1] => <span class="red">B</span>
[2] => <span class="red">C</span>
)
[orange] => Array
(
[0] => <span class="orange">D</span>
)
[green] => Array
(
[0] => <span class="green">E</span>
)
)
作为示例,我们设文本主体为:
敏捷的棕色狐狸跳过了懒惰的狗。a敏捷的棕色狐狸跳过那只懒狗。敏捷的棕色狐狸跳过了懒惰的狐狸狗。敏捷的棕色狐狸跳过了懒惰的狗。d快速的棕色的狐狸跳过了懒惰的狗。e
PHP函数preg_replace
不处理多维数组,所以我该如何去完成它?
要处理数组,只需使用foreach循环:
foreach($reg_cats as $key=>$reg_cat) {
$yourstring = preg_replace($reg_cat, $rep_cats[$key], $yourstring);
}
$reg_cats
是您的regex数组,$rep_cats
是您的替换数组。因为它们具有相同的键和相同大小的子数组,所以可以这样做。
如果您不需要转换匹配的内容(这里您希望将字母更改为大写),则可以使用单个关联数组:
$corr = array('<span class="red">$0</span>' => '~'b(?:a|b|c)'b~i',
'<span class="orange">$0</span>' => '~'bd'b~i',
'<span class="green">$0</span>' => '~'be'b~i');
$result = preg_replace($corr, array_keys($corr), $yourstring);
你需要把它们转换成一个它可以使用的数组。像这样。
$r=array();$s=$r;$n=0;
foreach($Second_array_you_didn_t_name as $kk => $vv)
foreach($vv as $k => $v)
{
$r[++$n]=$v;
$s[$n]=$First_array_you_didn_t_name[$kk][$k]
}
$tqbf="The quick brown fox jumps over the lazy dog. a The quick brown fox jumps over the lazy dog. b The quick brown fox jumps over the lazy dog. c The quick brown fox jumps over the lazy dog. d The quick brown fox jumps over the lazy dog. e";
print preg_replace($r,$s,$tqbf);
假设两个数组的形状相似,只需将两个数组平放,如下所示:
$search = call_user_func_array('array_merge', $search);
$replace = call_user_func_array('array_merge', $replace);
然后执行替换:
preg_replace($search, $replace, $string);