PHP计算另一个字符串中字符串的字符出现次数

ari*_*rik 6 php string character count

假设我有两个字符串.

$needle = 'AGUXYZ';
$haystack = 'Agriculture ID XYZ-A';
Run Code Online (Sandbox Code Playgroud)

我想指望那些字符如何经常$needle发生$haystack.在$haystack,有字符'A'(两次),'X','Y'和'Z',所有这些都在针中,因此结果应该是5(区分大小写).

在PHP中是否有任何功能,或者我必须自己编程吗?

提前致谢!

Tha*_*hai 20

您可以计算原始字符串的长度和没有这些字符的字符串的长度.它们之间的差异是匹配的数量.

基本上,

$needle = 'AGUXYZ';
$haystack = 'Agriculture ID XYZ-A';
Run Code Online (Sandbox Code Playgroud)

这是完成工作的部分.在一行.

$count = strlen($haystack) - strlen(str_replace(str_split($needle), '', $haystack));
Run Code Online (Sandbox Code Playgroud)

说明:第一部分是不言自明的.第二部分是字符串的长度,字符串中没有字符$needle.这是通过用$needle空白字符串替换每个出现的任何字符来完成的.

为此,我们使用分割$needle成一个数组,每个项目一次为字符str_split.然后传递给str_replace.它用$search空字符串替换数组中任何项的每个出现.

回声,

echo "Count = $count\n";
Run Code Online (Sandbox Code Playgroud)

你得到:

数= 5


Mat*_*den 6

试试这个;

function count_occurences($char_string, $haystack, $case_sensitive = true){
    if($case_sensitive === false){
        $char_string = strtolower($char_string);
        $haystack = strtolower($haystack);
    }

    $characters = str_split($char_string);
    $character_count = 0;
    foreach($characters as $character){
        $character_count = $character_count + substr_count($haystack, $character);
    }
    return $character_count;
}
Run Code Online (Sandbox Code Playgroud)

使用;

$needle = 'AGUXYZ';
$haystack = 'Agriculture ID XYZ-A';
print count_occurences($needle, $haystack);
Run Code Online (Sandbox Code Playgroud)

您可以将第三个参数设置false为忽略大小写.