duanqi6007 2014-11-19 23:52
浏览 6
已采纳

更改阵列中的所有键

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))))));
});

Thanks in advance for your help.

  • 写回答

1条回答 默认 最新

  • douchui7332 2014-11-20 00:11
    关注

    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.

    $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-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!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)