當前位置: 首頁> 最新文章列表> 如何通過count_chars 和array_map 快速處理字符頻率?

如何通過count_chars 和array_map 快速處理字符頻率?

gitbox 2025-09-17

1. count_chars函數概述

count_chars是一個內建函數,用於計算字符串中每個字符出現的頻率,並返回一個關聯數組。這個數組的鍵是字符的ASCII 碼,值是該字符在字符串中出現的次數。

示例:

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"hello world!"</span></span><span>;
</span><span><span class="hljs-variable">$char_count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">count_chars</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);  </span><span><span class="hljs-comment">// 1 參數表示返回頻率的數組</span></span><span>

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$char_count</span></span><span>);
</span></span>

輸出結果為:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">104</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">101</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">108</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-number">111</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-number">119</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">114</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">100</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">33</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
)
</span></span>

在上述示例中, count_chars返回了字符串中每個字符(按ASCII 碼)的頻率。例如,字符h (ASCII 碼104)出現了1 次,字符l (ASCII 碼108)出現了2 次。

2. 將字符頻率轉為可讀形式

通常,我們希望看到字符的實際值而不是ASCII 碼。為此,我們可以結合array_map函數對返回的數組進行處理,將ASCII 碼轉換為字符。

array_map函數接受一個回調函數,並對數組的每個元素應用該回調函數。在我們的場景中,我們可以用它將ASCII 碼轉換成對應的字符。

示例:

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"hello world!"</span></span><span>;
</span><span><span class="hljs-variable">$char_count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">count_chars</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);

</span><span><span class="hljs-comment">// 將 ASCII 碼轉換為字符</span></span><span>
</span><span><span class="hljs-variable">$char_count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$key</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>);  </span><span><span class="hljs-comment">// chr() 函数將 ASCII 碼轉為字符</span></span><span>
}, </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$char_count</span></span><span>));

</span><span><span class="hljs-comment">// 將频率与字符关联</span></span><span>
</span><span><span class="hljs-variable">$char_count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_combine</span></span><span>(</span><span><span class="hljs-variable">$char_count</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$char_count</span></span><span>));

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$char_count</span></span><span>);
</span></span>

輸出結果為:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [h] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [e] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [l] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [o] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [w] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [r] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [d] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [!] =&gt; </span><span><span class="hljs-number">1</span></span><span>
)
</span></span>

此時我們就可以看到字符及其頻率了,輸出中每個字符的頻率也清晰可見。

3. 綜合使用count_charsarray_map計算字符頻率

通過上述兩步,我們可以快速計算出字符頻率並將其轉化為人類可讀的格式。可以把這兩個步驟封裝成一個函數,簡化重複操作。

函數示例:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">getCharFrequency</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$string</span></span></span><span>) {
    </span><span><span class="hljs-variable">$char_count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">count_chars</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
    </span><span><span class="hljs-variable">$char_count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$key</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>);  
    }, </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$char_count</span></span><span>));
    
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">array_combine</span></span><span>(</span><span><span class="hljs-variable">$char_count</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$char_count</span></span><span>));
}

</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"hello world!"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getCharFrequency</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

輸出結果為:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [h] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [e] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [l] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [o] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [w] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [r] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [d] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [!] =&gt; </span><span><span class="hljs-number">1</span></span><span>
)
</span></span>

通過getCharFrequency函數,我們可以快速得到任何字符串的字符頻率統計。無論字符串的長度如何, count_charsarray_map都能提供高效的解決方案。

4. 小結

在PHP 中,利用count_charsarray_map函數,我們可以快速且高效地處理字符頻率。 count_chars提供了一個原始的頻率統計,而array_map則能幫助我們將結果轉換為更直觀的格式。通過結合這兩個函數,你可以在字符串分析、文本處理等場景中節省大量時間和精力。