内爆在用于 preg_replace_callback 的模式中有什么作用?

What does implode do in a pattern used for preg_replace_callback?

我不是 php 开发者,希望得到一些帮助来理解

$keys = array_keys($parameters['macrons']);
        $pattern = '/([' . implode('', $keys) . '])ー/u';

        return preg_replace_callback($pattern, function($matches) use ($parameters) {
            return $parameters['macrons'][$matches[1]];
        }, $str);

还有一个类似这样的 yaml 文件:

- function: transliterateChoonpu
      parameters:
            macrons:
                a: ā
                i: ī
                u: ū
                e: ē
                o: ō

此代码查找一些元音后跟 ー(U+30FC Unicode character) in the string $str and replace them with their equivalent chōonpu关于函数名称似乎很明显)。

构建模式

                       $keys = array_keys($parameters['macrons']);

$parameters['macrons']是一个关联数组:

array(
    'a' => 'ā',
    'i' => 'ī',
    'u' => 'ū',
    'e' => 'ē',
    'o' => 'ō'
)

键被 $keys 引用:['a', 'i', 'u', 'e', 'o']

                   $pattern = '/([' . implode('', $keys) . '])ー/u';

Imploding 没有分隔符的键允许生成匹配任何元音(y 除外)后跟 U+30FC Unicode 的结果模式 '/([aiueo])ー/u' Unicode 字符串中的字符(称为 片假名-平假名延音标记 )。

替换元音

       return preg_replace_callback($pattern, function($matches) use ($parameters) {
           return $parameters['macrons'][$matches[1]];
       }, $str);

对于每个匹配的元音,preg_replace_callback 调用匿名函数作为第二个参数传递给它匹配的元音。此回调的结果替换结果字符串中匹配的元音(由 preg_replace_callback 返回)。

回调只是 returns $parameters['macrons'] 关联数组中匹配元音索引的值。

因此,元音被相应的 chōonpu 替换了!