2014-04-09 48 views
1

我需要一些幫助來獲取字符串中數組的計數。使用函數計數的字符串中的字詞

我有5個字的數組:

$array_planet = array('[Sun]', '[Moon]', '[Mercury]', '[Venus]', '[Mars]'); 

,我已經許多字符串看起來像:

$string_source = 'blabla[Sun][Sun]blabla[Moon][Moon][Moon]blabla[Sun][Sun][Sun][Sun]blabla[Venus]'; 

我需要一個函數返回:

$string_out = 'blabla[Sun][2]blabla[Moon][3]blabla[Sun][4]blabla[Venus][1]'; 

blabla可以是任何長度和值。

+1

您是否試過'array_count_values'? –

+0

array_count_values return me [Sun] [6],但是我需要[Sun] [2] blabla [Sun] [4] –

+0

考慮接受其中一個給nanswers。他們都很好,人們花時間幫助你,這應該是令人滿意的。而且它可以防止這個問題得到更多不必要的關注。 –

回答

3

只需使用preg_replace_callback()

$string_source = preg_replace_callback('/(\[[^\[\]]+\])+/', function($matches) 
{ 
    return $matches[1].'['.(strlen($matches[0])/strlen($matches[1])).']'; 
}, $string_source); 

請注意,我不依賴行星陣列,因爲正則表達式替換不需要這樣做。

小提琴可用here

+0

這是一個完美的答案。 +1 –

+0

@AlmaDo謝謝! –

1

我會用preg_match_all從您的字符串獲得部件,所以你最終就吃這樣的:

array = (
0= > 'blabla[Sun][Sun]', 
1 => 'blabla[Moon][Moon][Moon]', 
2 => 'blabla[Sun][Sun][Sun][Sun]', 
3 => 'blabla[Venus]' 
); 

然後在陣列上迭代,並使用str_replacesubstr_count

+0

blabla可以是任何長度和值 –

+0

我知道。它仍然會工作,但你必須做*一些*認爲你自己在這裏:) –

2

使用preg_replace_callback()來實現這一目標:

$result = preg_replace_callback('/(\[.*?])+/', function($m) { 
    return $m[1].'['.substr_count($m[0], $m[1]).']'; 
}, $string_source); 

輸出:

blabla[Sun][2]blabla[Moon][3]blabla[Sun][4]blabla[Venus][1] 

Demo

+0

它不應該是'[太陽] [太陽] 2',它應該是'[太陽] [2]' –

+0

我沒有看到體現在演示中,仍然顯示相同。請再檢查一次。 @AmalMurali –

+0

blabla可以是任何長度和數值 –

相關問題