【问题标题】:PHP: Find number of different letters in a stringPHP:查找字符串中不同字母的数量
【发布时间】:2019-08-24 13:45:25
【问题描述】:

我想找出一个字符串包含多少个唯一字符。例子:

"66615888"    contains 4 digits (6 1 5 8).
"12333333345" contains 5 digits (1 2 3 4 5).

【问题讨论】:

  • 你关心数字(字符)的返回顺序吗?
  • 所问的问题是询问“多少”独特字符,而不是它们的列表。
  • @Floris 我没有,只需要“多少”。

标签: php


【解决方案1】:
echo count( array_unique( str_split( '66615888')));

Demo

文档:

  1. count() - 计算数组中的元素个数
  2. array_unique() - 查找数组中的唯一元素
  3. str_split() - 将字符串拆分为数组

【讨论】:

  • +1 但是让我问一下:您知道哪个性能更好:您的解决方案还是 merlin2011's/NikiC's?
  • @insertusernamehere 我不知道。哪个更好?
  • @insertusernamehere - simple test 告诉我 NikiC 在 1,000,000 次迭代后更快。我更喜欢这种方式,因为 IMO 更具可读性。
  • 感谢测试。我认为创建数组会产生一些开销,直接字符串操作可能会更快。但如果只运行几次,最终只是微优化。
【解决方案2】:

count_chars给你一张char => frequency的地图,你可以用array_sum来总结:

$count = array_sum(count_chars($str));

或者,您可以对count_chars 使用3 模式,这将为您提供一个包含所有唯一字符的字符串:

$count = strlen(count_chars($str, 3));

【讨论】:

  • 我更喜欢这个答案而不是“接受”的答案。创建所有元素的数组需要大量开销 - count_chars(,3) 是获取所有唯一字符的最直接方法,而其中的 strlen 是计数 - 这就是所要求的。它得到了我的投票。
【解决方案3】:

PHP 有一个计算字符的函数。

$data = "foobar";
$uniqued = count_chars($data, 3);// return string(5) "abfor"
$count = strlen($uniqued);

请参阅文档here

【讨论】:

    【解决方案4】:

    您可以使用以下脚本:

    <?php
      $str1='66615888';
      $str2='12333333345';
      echo 'The number of unique characters in "'.$str1.'" is: '.strlen(count_chars($str1,3)).' ('.count_chars($str1,3).')'.'<br><br>';
      echo 'The number of unique characters in "'.$str2.'" is: '.strlen(count_chars($str2,3)).' ('.count_chars($str2,3).')'.'<br><br>';
    ?>
    

    输出:

    “66615888”中的唯一字符数为:4(1568)

    “12333333345”中的唯一字符数为:5(12345)


    这里的 PHP 字符串函数 count_chars() 在模式 3 中生成一个包含所有唯一字符的数组。

    PHP 字符串函数strlen() 产生存在的唯一字符总数。

    【讨论】:

      【解决方案5】:

      这是另一个也适用于多字节字符串的版本:

      echo count(array_keys(array_flip(preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY))));
      

      【讨论】:

        猜你喜欢
        • 2022-06-12
        • 1970-01-01
        • 2017-03-20
        • 2015-11-26
        • 2021-12-10
        • 2016-07-11
        • 1970-01-01
        • 1970-01-01
        • 2021-02-22
        相关资源
        最近更新 更多