我想替换数组中的所有索引键,但我只需要使用像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的使用是多余的,不需要.谢谢你的指针!
标签:php,arrays 来源: https://codeday.me/bug/20190824/1712788.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。