【问题标题】:preg_replace, preg_replace_callback and Array to string conversionpreg_replace、preg_replace_callback 和数组到字符串的转换
【发布时间】:2017-05-18 16:16:08
【问题描述】:

我从 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

而且,我真的不知道如何调整回调以使其正常工作^^。

谢谢:),

【问题讨论】:

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2016-02-07
    • 2017-06-02
    • 2015-08-09
    • 2013-04-28
    • 2014-04-27
    • 2013-03-05
    相关资源
    最近更新 更多