【问题标题】:How to count alphabetic characters in a string?如何计算字符串中的字母字符?
【发布时间】:2017-08-08 16:23:33
【问题描述】:

我不知道该怎么做:

$string = "this is a test sentence";

我想做的是在那个字符串中搜索字母字符,并显示其中每个字符的数量,如下所示:

'T'在句子中使用了 3 次。

“i”在句子中使用了 2 次。

我尝试了ctype_alpha() 和其他一些东西,但我无法得到我正在寻找的答案。

【问题讨论】:

  • count_chars

标签: php


【解决方案1】:

请使用此代码。

array_count_values() 是 PHP 函数,它返回每个的计数 数组中的字符。所以我们需要将字符串拆分成一个数组,使用str_split(),然后使用array_count_values()进行计数。

$string = "this is a test sentence";
$k = array_count_values(str_split($string));
print_r($k);

Demo

【讨论】:

  • 让我宣布这个答案IS不正确。它在结果中包含空格,这不是要求的。也许你想在拆分前str_replace()
【解决方案2】:

如果您需要专门查找字母字符,最好使用正则表达式,而不仅仅是str_split,它将为您提供所有字符,无论是否为字母。

preg_match_all('/[A-Za-z]/', $string, $letters);

正则表达式匹配单个字符,因此$letters[0] 中的每个完整模式匹配都是一个字母字符。

一旦你有了一个字母数组,你就可以使用array_count_values来计算它们。

$letter_counts = array_count_values($letters[0]);

如果您想按字母顺序对结果进行排序,ksort($letter_counts) 会这样做。


如果您确实改用str_split,则可以从结果中过滤掉非字母字符。

$letters = array_filter(str_split($string), 'ctype_alpha');

【讨论】:

  • 我可能会推荐preg_split(),因为它不会创建不必要的数组深度。 3v4l.org/nV1ZF
【解决方案3】:

以下代码将获取字符串的每个字母,将其设置为数组中的键,并对每个字母进行计数。如果您不希望区分大小写,请先通过 strtolower() 或类似名称运行字符串。

<?php
$string = "this is a test sentence";

$counts = [];

for($i = 0; $i < sizeof($string);$i++){
    $char = $string[$i];
    if(!isset($counts[$char])){
        $counts[$char] = 0;
    }
    $counts[$char]++;
}

var_dump($counts);

要根据键进行排序,请执行以下操作:

ksort($counts);
var_dump($counts);

【讨论】:

    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多