2011-03-22 84 views
1

嘗試從文本文件中獲取數字並查看它們發生的次數。 我已經到了可以將所有這些打印出來的地步,但是我想只顯示一次數字,然後可能會出現在他們之後(即:Key |金額; 317 | 42)。 不尋找答案本身,所有的學習都很好,但是如果你爲我找出一個答案,那也會很棒!從字符串中計算PHP和字數

+0

一些代碼請? – Neal 2011-03-22 18:59:19

+0

向我們展示您到目前爲止所擁有的,我們可以提供更好的建議。 – Ryre 2011-03-22 18:59:52

+0

$ numbers = file_get_contents('names.txt'); $ convert = explode(「」,$ numbers); ($ i = 0; $ i 」; } 到目前爲止,它只是爲了方便而在屏幕上列出數字。 – Dysfunctionator 2011-03-24 12:09:12

回答

0

preg_match_all將返回針對字符串的匹配數。

$count = preg_match_all("#$key#", $string); 
print "{$key} - {$count}"; 
+0

爲了在這裏使用'preg_match_all',您首先必須獲取文件中所有唯一字的列表。當你正在做這個過程時,你可以很容易地計數它們的出現次數。在列表獲得名單後運行'preg_match_all'只會造成浪費。 – glomad 2011-03-22 19:09:36

+0

@itchy我誤解了這個問題嗎?他說他試圖匹配從文本文件中提取的字符串。你爲什麼要數獨特的話? – vicTROLLA 2011-03-22 19:12:42

+0

「嘗試從文本文件中獲取數字並查看它們發生的次數。」意思是有一個包含數字的文本文件,其中一些是重複的,他必須提取所有這些數字並計算它們每次出現的次數。我想不出任何其他含義,儘管我也可能會誤解它。 – glomad 2011-03-22 19:18:58

0

所以,如果你已經提取所需的數據,你可以這樣使用(相當)簡單的數組做:

$counts = array(); 

foreach ($keysFoundFromFile AS $key) { 
    if (!$counts[$key]) $counts[$key] = 0; 
    $counts[$key]++; 
} 

print_r($counts); 

如果您已經在循環中提取從密鑰文件,那麼您可以直接將它們直接分配給$counts陣列,而無需執行第二個循環。

0

我認爲您正在尋找功能substr_count()
儘管如此,如果您正在尋找「123」,並且它找到「4512367」,它會將其作爲其中的一部分進行匹配。另一種方法是使用正則表達式,並使用單詞邊界:(preg_quote()良好做法,\b word邊界,所以我們可以放心,這不是嵌入到另一個號碼的數字)

$count = preg_match_all('|\b'. preg_quote($num) .'\b|', $text);