这是利用count_chars()、array_filter() 和array_sum() 的一种方法。有很多方法可以解决这个问题。
此方法将获取每个字母的字节值,过滤它们 (ascii table),然后对这些值求和。
$string="HelLo wOrlD";
$chars=count_chars($string,1);
$uppers=array_sum(array_filter($chars,function($k){return in_array($k,range(65,90));},ARRAY_FILTER_USE_KEY));
var_export($uppers);
echo "\n";
$lowers=array_sum(array_filter($chars,function($k){return in_array($k,range(97,122));},ARRAY_FILTER_USE_KEY));
var_export($lowers);
输出:
4
6
这是另一个提供相同结果的:
$string="HelLo wOrlD";
$upper=$lower=0;
foreach(str_split($string) as $c){
if(ctype_upper($c)){
++$upper;
}elseif(ctype_lower($c)){
++$lower;
}
}
echo "Uppers = $upper, Lowers = $lower";
这是另一个:
$string="HelLo wOrlD";
$array=str_split($string);
$uppers=sizeof(array_filter($array,'ctype_upper')); // 4
$lowers=sizeof(array_filter($array,'ctype_lower')); // 6
$string="HelLo wOrlD";
$array=str_split($string);
$uppers=sizeof(array_intersect($array,range('A','Z'))); // 4
$lowers=sizeof(array_intersect($array,range('a','z'))); // 6