我想替换数组中的所有索引键,但我只需要用像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))))));
});
2条答案
按热度按时间v64noz0r1#
如果不想使用
foreach
,可以使用array_keys
、array_map
和array_combine
的组合来实现。这应该输出如下内容:
相关文档:
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
的使用是多余的,不需要的。谢谢你的指针!w46czmvw2#
不建议替换原始数组中的键,因为在处理过程中有意外覆盖元素的风险。应使用旧值和新键生成新数组。
比@MSost的答案更直接的是,使用
array_reduce()
函数式地迭代数组,并将键修改的元素与结果数组合并。指示
ucwords()
将下划线视为断字。代码:(Demo)
经典循环的等价形式如下所示:(Demo)