2017-08-08 123 views
-3

我無法弄清楚如何做到這一點:如何計算字符串中的字母字符?

$string = "this is a test sentence"; 

我想要做的是尋求該刺字母,並展示如何每個字符的很多是有這樣的事情:

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

'i'在句子中使用了2次。

我試過ctype_alpha()和其他一些東西,但我不能得到相當我正在尋找的答案。

+5

'array_count_values(str_split($字符串))' –

+0

或'count_chars' –

+0

歡迎的StackOverflow,問問題,請確保您的問題,滿足[如何提出?](HTTPS之前://計算器。com/help/on-topic)本網站的標準 –

回答

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

+0

爲什麼要這個OP「使用此代碼」?一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,還是爲了將來訪問SO。 –

+0

如果這是不對的,請張貼正確的答案。它提供了預期的產出。 JFYI –

+1

我沒有說這是錯誤的,我說**好的答案**提供了一個解釋,並提供了關於爲什麼和/或這個代碼如何回答提高答案的長期價值的問題的附加背景。 –

-1

嘗試用下面的代碼,看看它是否適合你:

<?php 
$data = "Two Ts and one F."; 

foreach (count_chars($data, 1) as $i => $val) { 
    echo "There were $val instance(s) of \"" , chr($i) , "\" in the string.\n"; 
} 
?> 
+4

雖然此代碼可能會回答問題,但提供有關此代碼爲什麼和/或如何回答問題的其他上下文可提高其長期價值。 –

+0

這只是從PHP文檔中直接複製並粘貼的count_chars。 –

0

下面的代碼將繩子的每一個字母,將其設置爲關鍵在一個數組中並計算每個字母。如果您不想區分大小寫,請先通過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); 
+2

做或不​​做,沒有「嘗試」。一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,還是爲了將來訪問SO。 –

+0

@JayBlanchard我寧願讓人們去嘗試,而不是讓他們去做點什麼。可能還有些情況需要更改所提供的代碼。 – Canis

+0

確實如此,但「嘗試這個」答案通常不能提供足夠的上下文。 –

0

如果你需要專門尋找字母,它可能是最好使用正則表達式,而不僅僅是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');