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.
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($array, function ($value, &$key) {
$key = str_replace("_", "", implode('_', array_map('ucfirst', explode('_', ucwords(strtolower($key))))));
});
If you don't want to use a
foreach
, you can use a combination ofarray_keys
,array_map
, andarray_combine
to achieve this.This should output something like:
Relative docs:
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
EDIT
As @Wrikken pointed out, the use of
array_values
is redundant and not needed. Thanks for the pointer!