相关疑难解决方法(0)

将数组/对象树的键转换为小写

我目前正在优化PHP应用程序,发现一个函数被调用大约10-20k次,所以我想我会在那里开始优化:

function keysToLower($obj)
{
        if(!is_object($obj) && !is_array($obj)) return $obj;
        foreach($obj as $key=>$element)
        {
                $element=keysToLower($element);
                if(is_object($obj))
                {
                        $obj->{strtolower($key)}=$element;
                        if(!ctype_lower($key)) unset($obj->{$key});
                }
                else if(is_array($obj) && ctype_upper($key))
                {
                        $obj[strtolower($key)]=$element;
                        unset($obj[$key]);
                }
        }
        return $obj;
}
Run Code Online (Sandbox Code Playgroud)

大部分时间都花在递归调用上(在PHP中很慢),但我没有看到任何方法将它转换为循环.你会怎么做?

此版本不考虑关联数组,因为我的数据没有任何关联数组,但比原始版本快近10倍.大部分工作都是由Gumbo完成的,主要的加速来自于使用引用和创建新对象而不是取消旧键.

function &keysToLower(&$obj)
{
    if(is_object($obj))
    {
        $newobj = (object) array();
        foreach ($obj as $key => &$val)
            $newobj->{strtolower($key)} = keysToLower($val);
        $obj=$newobj;
    }
    else if(is_array($obj))
        foreach($obj as &$value)
            keysToLower($value);
    return $obj;
}
Run Code Online (Sandbox Code Playgroud)

php performance

3
推荐指数
1
解决办法
3430
查看次数

标签 统计

performance ×1

php ×1