【问题标题】:Change all keys in a array更改数组中的所有键
【发布时间】:2014-11-19 23:52:44
【问题描述】:

我想替换数组中的所有索引键,但我只需要使用 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))))));
});

提前感谢您的帮助。

【问题讨论】:

  • PHP Change Array Keys 的可能重复项
  • 您是否有什么特别的原因不想使用 foreach 来解决这个问题?
  • @DaOgre 不是真的,我只是想使用 foreach 函数的替代方法。
  • ^ 我同意 DaOgre。 foreach-es 简单、易读、可维护,并且可能与您想出的任何东西一样快或更快。但是你,你可以使用array_combine(array_map($yourfunc,array_keys($array)),$array);
  • 我也同意 DaOgre。为什么你想要用简单的方式来做困难的方式。

标签: php arrays


【解决方案1】:

如果您不想使用foreach,可以使用array_keysarray_maparray_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 的使用是多余的,不需要。谢谢指点!

【讨论】:

  • 哈,我也是这么想的(虽然我喜欢foreach)。快速说明:不需要array_values
  • 太棒了!非常感谢。我已经用一行重写了你的代码:$array = array_combine(array_map(function ($key){ return str_replace("_", "", implode('_', array_map('ucfirst', explode('_', ucwords(strtolower($key)))))); }, array_keys($array)), array_values($array));
  • 如果这对你来说更易读,对你来说更有力量;)很高兴我能提供帮助
  • 哈哈 是的,我知道这不可读,但我不需要理解它,因为我需要从 Paypal 解析一个大数组,然后对其执行 extract()。 ^^
猜你喜欢
  • 2017-10-23
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多