preg_replace,preg_replace_callback和Array to string conversion

时间:2017-01-04 11:27:28

标签: php regex zend-framework preg-replace preg-replace-callback

我从PHP 5.4中的应用程序获得此代码:

$rightKey = preg_replace(array(
                "/(_)(\p{L}{1})/eu",
                "/(^\p{Ll}{1})/eu"
            ), array(
                "mb_strtoupper('\\2', 'UTF-8')",
                "mb_strtoupper('\\1', 'UTF-8')"
            ), $key);

它不能正常工作,因为不推荐使用preg_replace。我做了一些研究并把它变成了:

$rightKey = preg_replace_callback(array(
                "/(_)(\p{L}{1})/u",
                "/(^\p{Ll}{1})/u"
            ), function($m) { return array(
                "mb_strtoupper('\\2', 'UTF-8')",
                "mb_strtoupper('\\1', 'UTF-8')"
            ); }, $key);

我将函数更改为preg_replace_callback,我删除了“e”,并添加了回调。

但现在我有:

Array to string conversion

并且,我真的不知道如何调整回调,所以它有效^^。

谢谢:),

1 个答案:

答案 0 :(得分:1)

该函数必须返回一个字符串,而不是一个数组,它对每个匹配都是相同的函数:

$key = 'abc _def';
$rightKey = preg_replace_callback(array(
            "/_(\p{L})/u",
            "/(^\p{Ll})/u"
        ), 
        function($m) { 
            return mb_strtoupper($m[1], 'UTF-8');
        },
        $key);
echo $rightKey;

<强>输出:

Abc Def