我如何使用 "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)
我有这个数组
$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)