2012-07-20 108 views
1

好的,所以我得到我的手弄髒PHP我已經開始玩數組,字符串等。PHP - 查找字符串中特定字符長度的最常用單詞。

現在我知道數組有一個整潔的功能,稱爲「array_count_values」,它可以幫助確定最重複的條目是什麼。我無法找到一個相當於這個字符串 - 我需要將字符串轉換爲數組嗎?

基本上,我希望我的代碼能夠確定給定字符串中最常見(重複)字是否超過特定長度。

三世的字符長度的資格,這個代碼可以找到答案的什麼是在陣列中的重複最多的一句話的問題:

<?php 


$param[0]="Ted"; 
$param[1]="Mark"; 
$param[2]="Mark"; 
$param[3]="Ross"; 
$param[3]="Clarence"; 

function array_most_common($arr) 
{ 
    $counted = array_count_values($arr); 
    arsort($counted); 
    return(key($counted));  
} 

$mostCommon = array_most_common($param); 
echo $mostCommon; 
?> 

那麼什麼會使這是可行的一個字符串?和一個字符數量過濾器?

+0

我不明白你的意思用繩子做什麼。不是你正在使用的那些字符串? – 2012-07-20 16:27:36

+0

我看到答案,他們必須是正確的,你想要的是將一個長字符串分解成一組單詞。 – 2012-07-20 16:28:56

回答

2

用字符串,你可以在空間上只需要explode()preg_split()來組成一個數組。使用preg_split()是有利的,因爲它將消除explode()不會的重複和無關空白。

$array = preg_split('/\s+/', "This is a pretty long long long string", -1, PREG_SPLIT_NO_EMPTY); 

然後,一旦你有一個數組,用array_filter()刪除那些不符合要求的字符:

$threshold = 3; 
$filtered = array_filter($array, function($el) use($threshold) { 
    return strlen($el) > $threshold; 
}); 

一旦你的$filtered陣列,只需使用在array_count_values()

$counts = array_count_values($filtered); 
arsort($counts); 
echo key($counts) . ' -> ' . current($counts); 

Here是一個演示,打印:

long -> 3 
+0

但是,我將如何去過濾或超過特定字符限制的單詞? 所以這將是重複次數+字符數限制=打印結果的次數。 – 2012-07-20 16:33:36

+0

@ SiriusMane - 在我的回答中,'array_filter()'。 – nickb 2012-07-20 16:36:58

+0

當我修改閾值變量(甚至達到6左右)時,仍然會顯示「長」作爲答案。如果我添加「胖乎乎的胖乎乎」字樣,它會選擇它 - 如果它在字符串中的「長」前面。如果相反,它仍然會顯示很長的答案。 – 2012-07-20 16:40:01

1

要回答你的問題,根據我的意思,沒有確定字符串中最常用單詞的函數。但是,您可以通過空格字符串explode()array_count_values()來生成數組。我不太確定你的意思是「字符數量過濾器」,或者你打算實現這個目標。

1
$str = strtolower("The quick brown fox jumps over the lazy dog"); 
$words = explode(" ", $str); 
$words = array_filter($words, function($word) { 
    return strlen($word) > 2; 
}); 
$word_counts = array_count_values($words); 
arsort($word_counts); 
$most_common_word = key($word_counts); // Returns "the" 
相關問題