我需要一些帮助来获取字符串中的数组计数。
我有一个包含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
可以是任意长度和值。
答案 0 :(得分:3)
$string_source = preg_replace_callback('/(\[[^\[\]]+\])+/', function($matches)
{
return $matches[1].'['.(strlen($matches[0])/strlen($matches[1])).']';
}, $string_source);
请注意,我不依赖于行星数组,因为正则表达式替换不需要这样做。
小提琴可用here
答案 1 :(得分: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]
答案 2 :(得分:1)
我会使用preg_match_all从你的字符串中获取部分,所以你最终会这样:
array = (
0= > 'blabla[Sun][Sun]',
1 => 'blabla[Moon][Moon][Moon]',
2 => 'blabla[Sun][Sun][Sun][Sun]',
3 => 'blabla[Venus]'
);
然后遍历数组并使用str_replace和substr_count。