确定php字符串中的重复字符

时间:2014-09-10 19:31:48

标签: php arrays string

我找到了许多如何在字符串中查找重复字符的示例。我相信我的要求是独一无二的。

我有字符串

$string=aabbbccddd;

我需要确定哪个角色最重复。 因此,对于上面的例子,它会说 最重复的角色是“B”。 然而,在上面的例子中,B和D重复3次。 需要发现这一点。 B和D都重复了3次。

这是我到目前为止所拥有的。我需要的FAR,但从起点

    <?php
$string = "aabbbccddd";
$array=array($array);
foreach (count_chars($string, 1) as $i => $val) {
$count=chr($i);
$array[]= $val.",".$count;
}
print_r($array);
?>

任何人都有可以帮助我的事情吗?

5 个答案:

答案 0 :(得分:2)

这正是您所寻找的:

<?php
function printCharMostRepeated($str)
{
    if (!empty($str))
    {
        $max = 0;
        foreach (count_chars($str, 1) as $key => $val)
            if ($max < $val) {
                $max = $val;
                $i = 0;
                unset($letter);
                $letter[$i++] = chr($key);
            } else if ($max == $val)
                $letter[$i++] = chr($key);
        if (count($letter) === 1)
            echo 'The character the most repeated is "'.$letter[0].'"';
        else if (count($letter) > 1) {
            echo 'The characters the most repeated are : ';
            $count = count($letter);
            foreach ($letter as $key => $value) {
                echo '"'.$value.'"';
                echo ($key === $count - 1) ? '.': ', ';
            }
        }
    } else
        echo 'value passed to '.__FUNCTION__.' can\'t be empty';
}

$str  = 'ddaabbccccsdfefffffqqqqqqdddaaa';
printCharMostRepeated($str);

答案 1 :(得分:1)

根据georg的观点,我会使用正则表达式。这将使用数组键ddaaddddd=>2来处理分割重复项,例如ddd=>3,但在给定dd时,只会显示ddaadd的一个条目。要表示两者都需要更复杂的数组:

$string = "ddaabbbccddda";
preg_match_all('/(.)\1+/', $string, $matches);
$result = array_combine($matches[0], array_map('strlen', $matches[0]));
arsort($result);

如果您只需要计算所有出现次数,请尝试:

$result = array_count_values(str_split($string));
arsort($result);

传统答案:

如果您没有拆分重复项:

$string  = 'aabbbccddd';
$letters = str_split($string);
$result  = array_fill_keys($letters, 1);
$previous = '';

foreach($letters as $letter) {
    if($letter == $previous) {
        $result[$letter]++;
    }
    $previous = $letter;
}
arsort($result);
print_r($result);

或者正则表达式:

preg_match_all('/(.)\1+/', $string, $matches);
$result = array_combine($matches[1], array_map('strlen', $matches[0]));
arsort($result);

答案 2 :(得分:0)

答案 3 :(得分:0)

<?php
  $word = "abcdefghbi";

  for($i=0; $i<strlen($word);$i++){
      for($k=0;$k<strlen($word);$k++){
          if($word[$i] == $word[$k] && $i != $k){
              echo $word[$k]." is duplicate"; 
              exit;     
          }
    
      }
  }
  echo "no match found";
?>

答案 4 :(得分:0)

$data = "aabbbcccdddz";
$array = str_split($data);
$v = array_count_values($array);
foreach($v as $k => $val){ 
        echo $k.' = '.$val.'<br>';
}