将PHP数组所有的Key,都从驼峰形式转变成下划线形式

比如有这样一个数组:

[
    "Sku" => "A1B2C3D4",
    "FriendlyUrl" => "http://example.com/1.html"
]

希望能够转化为下面这个形式的数组:

[
    "sku" => "A1B2C3D4",
    "friendly_url" => "http://example.com/1.html"
]

这里借助Laravel的Collection对象和snake_case这个helper函数,可以很方便实现这个效果

function array_snake_case_keys(array $items): array {
    $items = collect($items);
    return $items->keys()->map(function($key) {
        return snake_case($key);
    })->combine($items->values())->all();
}

btw,这个函数已经封装到了 cuimingda/laravel-helpers 中,只要引入进来就可以直接像其他helper函数一样使用:

composer require cuimingda/laravel-helpers

还有需要说明的是,snake_case这个函数有个bug,如果是imgURL这种大写字母组成的字符串,期望转化成img_url,但实际会转化为img_u_r_l,在laravel/framework中提了一个Issue,但被认为没有问题。