答案:
1.我同事写的。直接字符串的纯运算。
function reverse($str) {
$len = strlen($str);
$reverseStrArr = [];
for ($i = $len - 1; $i >= 0; $i--) {
if (($str{$i} >= 'a' && $str{$i} <= 'z') || ($str{$i} >= 'A' && $str{$i} <= 'Z')) {
$reverseStrArr[] = $str{$i};
}
}
$result = '';
$k = 0;
for ($i = 0; $i < $len; $i ++) {
if (($str{$i} >= 'a' && $str{$i} <= 'z') || ($str{$i} >= 'A' && $str{$i} <= 'Z')) {
$result .= $reverseStrArr[$k++];
} else {
$result .= $str{$i};
}
}
return $result;
}
echo reverse("Ab,c,de!$");die;
2.我自己实现的
$a = 'a,Ab,c,de!$';
$str = str_split($a);
$normalStr = [];
foreach ($str as $key=>$value){
if(($value >= 'A' && $value <= 'Z') ||($value >= 'a' && $value <= 'z')){
$normalStr[$key] = $value;
}
}
// 获取对应的key和反转之后的值
$keys = array_keys($normalStr);
$value = array_reverse($normalStr);
$new = array_combine($keys, $value);
foreach ($str as $key=>&$value){
if(($value >= 'A' && $value <= 'Z') ||($value >= 'a' && $value <= 'z')){
$value = $new[$key];
}
}
$result = implode($str);