PHP7下preg_replace_callback_array函数解析

PHP7中PCRE增加了一个新的函数,那就是preg_replace_callback_array。

在此之前,PCRE中就已经有了preg_replace_callback,那这两者之间又有什么共同点和区别

首先复习一下preg_replace_callback的函数定义。

mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )

其中,$pattern可以是string或array类型。 

再来先看下方代码: 

<?php
$subject = 'hello world!';
$replaced = preg_replace_callback([
    '#(hello)#',
    '#(world)#',
], function ($matches) {
    return strtoupper($matches[1]);
}, $subject);
echo $replaced;

// HELLO WORLD!

再看preg_replace_callback_array的函数定义: 

mixed preg_replace_callback_array ( array $patterns_and_callbacks , mixed $subject [, int $limit = -1 [, int &$count ]] )

与preg_replace_callback对比,没有了$pattern和$callback,而是将两个结合成了一个associative的数组。

再看看示例代码:

<?php
$subject = 'Hello World';
$replaced = preg_replace_callback_array([
    '#(Hello)#' => function ($matches) {
        return 'Good';
    },
    '#(World)#i' => function ($match) {
        return 'day';
    }
], $subject);
echo $replaced;

// OUTPUT
// Good day

可以看出,preg_replace_callback只能针对多个pattern的匹配模式作出同一种callback行为。当然,可以在callback中实现不同的控制分支(switch/if),而preg_replace_callback_array则是通过传递pattern=>callback的associative对应关系,实现一对一的callback操作,更具清晰化。


总结:

相同点:

1)都是通过PCRE模式进行匹配,并实现替换

2)参数和返回值也基本相同,如subject为数组时,返回值为数组;subject为字符串时,返回值为字符串

不同点:

1)preg_replace_callback的pattern参数可以为字符串或数字下标的PCRE模式数组;而preg_replace_callback_array的pattern只能为keyValue的数组;

2)preg_replace_callback的callback会对pattern参数中所有的模式作相同的操作;而preg_replace_callback_array的pattern因为定义了keyValue的方式,会使用相应的key对应的callback进行处理;

3)参数数量不同:preg_replace_callback为5个参数,preg_replace_callback_array为4个参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值