我如何使用 "strcspn" 或 "any other Approach to change key of Array" 来获得合适的结果?

How can i use "strcspn" or "any other Approach to change key of Array" to get an appropriate result?

我有这个数组

$array = array('keyPad'=>'pencil', 
               'timeDuration'=>'exam', 
               'check_year'=>2004, 
               'currentTime'=>'12:06:25')

我想把它转换成这个数组

array('Key Pad'=>'pencil', 
      'Time Duration'=>'exam',  
      'Check Year'=>2004 ,
      'Current Time'=>'12:06:25')

我试过这个代码

foreach($array as $key=>$val){
    if(strpos($key,"_")){
        $namesArray = explode("_",$key);
        $name = ucwords(implode(" ",$namesArray));
        //echo $name;die;   
    }elseif(strcspn($key, 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ')){
        //how
    }
}

我会采用以下方法:

foreach($array as $key => $val) {
    if(strpos($key,"_")){
        $array[str_replace('_', ' ', $key)] = $array[$key];
        unset($array[$key]);
    } else if(preg_match('/[A-Z]/', $key) && (!ctype_upper($key[0]) || preg_match_all('/[A-Z]/', $key, $matches) > 1)){
        $array[preg_replace('/([a-z])([A-Z])/s',' ', $key)] = $array[$key];
        unset($array[$key]);
    }
}

我像你一样使用 foreach 遍历数组。

然后我检查下划线(就像您所做的那样)并使用 str_replace 替换它们以将键设置为替换结果。之后我删除了旧密钥。

如果没有下划线,我会检查键中的大写字符 - 但如果只有第一个字母是大写的,我就不会检查。

然后我按照上面的方法进行操作(将 CamelCase 替换为 space 并取消设置旧密钥。

测试:

Key               Result
-------------------------------
keyPad            key Pad
Keypad            Keypad
key_pad_test      key pad test
timeDuationTest   time Duration Test

您可以在 foreach 循环的最开始执行此操作并删除 strcspn 部分:

$key = preg_replace('/([A-Z])/', '_\1', $key)