2011-03-22 27 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);