I want to replace all index keys in a array but i need to do it only with a function like array_map (not with a foreach) and that's why it's a little hard for me.
我想要替换数组中的所有索引键,但我只需要使用array_map(不是foreach)这样的函数,这就是为什么对我来说有点难。
Actual array :
真正的数组:
$array = [
'mc_gross' => 10.17,
'protection_eligibility' => 'Eligible',
'address_status' => 'unconfirmed',
'payer_id' => 'STTAC7UV2CVJ4'
];
Expected array :
将数组:
$array = [
'McGross' => 10.17,
'ProtectionEligibility' => 'Eligible',
'AddressStatus' => 'unconfirmed',
'PayerId' => 'STTAC7UV2CVJ4'
];
I have already a function to put the first letter in uppercase and remove all '_' :
我已经有一个函数将第一个字母大写,并删除所有的'_':
str_replace(
"_",
"",
implode(
'_',
array_map(
'ucfirst',
explode(
'_',
ucwords(strtolower($key))
)
)
)
);
I have tried with array_walk, but this function can't replace index key, only value... :
我尝试过array_walk,但是这个函数不能替换索引键,只能替换value…:
array_walk($array, function ($value, &$key) {
$key = str_replace("_", "", implode('_', array_map('ucfirst', explode('_', ucwords(strtolower($key))))));
});
Thanks in advance for your help.
谢谢你的帮助。
1 个解决方案
#1
5
If you don't want to use a foreach
, you can use a combination of array_keys
, array_map
, and array_combine
to achieve this.
如果不想使用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);
This should output something like:
这应该输出如下内容:
array(4){
["McGross"]=>float(10.17)
["ProtectionEligibility"]=>string(8) "Eligible"
["AddressStatus"]=>string(11) "unconfirmed"
["PayerId"]=>string(13) "STTAC7UV2CVJ4"
}
Relative docs:
相关文档:
http://php.net/manual/en/function.array-keys.php
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-map.php
http://php.net/manual/en/function.array-combine.php
http://php.net/manual/en/function.array-combine.php
EDIT
编辑
As @Wrikken pointed out, the use of array_values
is redundant and not needed. Thanks for the pointer!
正如@Wrikken指出的,使用array_values是多余的,不需要。谢谢你的指针!
#1
5
If you don't want to use a foreach
, you can use a combination of array_keys
, array_map
, and array_combine
to achieve this.
如果不想使用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);
This should output something like:
这应该输出如下内容:
array(4){
["McGross"]=>float(10.17)
["ProtectionEligibility"]=>string(8) "Eligible"
["AddressStatus"]=>string(11) "unconfirmed"
["PayerId"]=>string(13) "STTAC7UV2CVJ4"
}
Relative docs:
相关文档:
http://php.net/manual/en/function.array-keys.php
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-map.php
http://php.net/manual/en/function.array-combine.php
http://php.net/manual/en/function.array-combine.php
EDIT
编辑
As @Wrikken pointed out, the use of array_values
is redundant and not needed. Thanks for the pointer!
正如@Wrikken指出的,使用array_values是多余的,不需要。谢谢你的指针!