如何计算字符串中不同的重复字符

时间:2019-05-08 15:35:11

标签: php

我有一个字符串“ Bbcdefcgh!”我想计算不同的重复字符。解决方案应将大写和小写字母视为不同的字符,并同时处理字母数字和特殊字符。

例如:给定一个字符串“ Bbcdefcgh !!”该函数应返回2(“ c”和“!”)

class DuplicateChar
{

    public function test1() 
    {
       return $this->duplicateCharacters("Bbcdefcgh!!");    
    }

    public function duplicateCharacters($input)
    {
      //
    }
}

 $o = new DuplicateChar;
 echo $o->test1();

2 个答案:

答案 0 :(得分:4)

您可以在此处使用一些很酷的功能:

$str = 'Bbcdefcgh!!';
$arr = str_split($str);

$data = array_filter(array_count_values($arr), function($el)
{
    return ($el > 1);
});

echo '<pre>'. print_r($data, 1) .'</pre>';

我们使用str_split将字符串拆分为一个数组,然后使用array_count_filter过滤值以仅获取重复超过1个的项目。

参考:

编辑:使用count_chars

如NigelRen所指出,可以使用count_chars()

  

count_chars —返回有关字符串中使用的字符的信息

$data = "Two Ts and one F.";

foreach (count_chars($data, 1) as $i => $val)
{
   echo "There were $val instance(s) of \"" , chr($i) , "\" in the string.\n";
}

full docs

答案 1 :(得分:1)

您可以使用str_splitarray_count_values来解决这个问题

$str = 'Bbcdefcgh!!';
$textToArray = str_split($str);
echo '<pre>';
print_r(array_count_values($textToArray));

结果

Array
(
[B] => 1
[b] => 1
[c] => 2
[d] => 1
[e] => 1
[f] => 1
[g] => 1
[h] => 1
[!] => 2
)