微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 更改数组中的所有键

我想替换数组中的所有索引键,但我只需要使用像array_map这样的函数(不是foreach),这就是为什么它对我来说有点困难.

实际数组:

$array = [
    'mc_gross' => 10.17,
    'protection_eligibility' => 'Eligible',
    'address_status' => 'unconfirmed',
    'payer_id' => 'STTAC7UV2CVJ4'
];

预期数组:

$array = [
    'McGross' => 10.17,
    'ProtectionEligibility' => 'Eligible',
    'Addressstatus' => 'unconfirmed',
    'PayerId' => 'STTAC7UV2CVJ4'
];

我已经有一个函数将第一个字母大写,并删除所有’_’:

str_replace(
    "_",
    "",
    implode(
        '_',
        array_map(
            'ucfirst',
            explode(
                '_',
                ucwords(strtolower($key))
            )
        )
    )
);

我试过用array_walk,但是这个函数不能替换索引键,只有值…:

array_walk($array, function ($value, &$key) {
    $key = str_replace("_", "", implode('_', array_map('ucfirst', explode('_', ucwords(strtolower($key))))));
});

在此先感谢您的帮助.

解决方法:

如果您不想使用foreach,可以使用array_keys,array_map和array_combine的组合来实现此目的.

$array = array(
    'mc_gross' => 10.17,
    'protection_eligibility' => 'Eligible',
    'address_status' => 'unconfirmed',
    'payer_id' => 'STTAC7UV2CVJ4'
);

//Get keys
$keys = array_keys($array);

//Format keys
function map($key){
    return str_replace(' ', '', ucwords(str_replace('_', ' ', $key)));
}

//Map keys to format function
$keys = array_map('map', $keys);

//Use array_combine to map formatted keys to array values
$array = array_combine($keys,$array);

var_dump($array);

这应该输出如下:

array(4){
    ["McGross"]=>float(10.17)
    ["ProtectionEligibility"]=>string(8) "Eligible"
    ["Addressstatus"]=>string(11) "unconfirmed"
    ["PayerId"]=>string(13) "STTAC7UV2CVJ4"
}

相关文档:

http://php.net/manual/en/function.array-keys.php

http://php.net/manual/en/function.array-map.php

http://php.net/manual/en/function.array-combine.php

编辑

正如@Wrikken指出的那样,array_values的使用是多余的,不需要.谢谢你的指针!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐