通过多维数组替换用户输入的文本正文中的单词


Substituting Words in a Body of Text with User Input via Multidimensional Arrays

我有两组数据存储在多维数组中。一个存储正则表达式,用于在较大的文本主体中查找整个单词:

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);