Preg_replace 含数组元素

Preg_replace with array element

我有如下数组:

function func($name){
    $arr = [
      'dog' => 'boo|pet|chinsu|lu',
      'man' => 'david|peter|john|smith',
      'woman' => 'marry|daisy|anna|tailor'
    ];
    foreach($arr as $k=>$v) {
        $name = preg_replace("/($v)/i",$k,$name);
    }
    return $name;
}

echo func('john'); //return 'man' => OK
echo func('peter');  //return 'doger' => Not OK

应该return'man'而不是'doger',但是'pet'也存在'peter'。

如何解决此问题但仍在使用 preg_replace?

只需在您的正则表达式中添加单词边界 \b

$name = preg_replace("/\b$v\b/i", $k, $name);
//              here __^^  ^^