我有一个字符串和一组值,我想检查一个数组中的项目出现在字符串中的次数。
这是最快的方法吗?
$appearsCount = 0;
$string = "This is a string of text containing random abc def";
$items = array("abc", "def", "ghi", "etc");
foreach($items as $item)
{
$appearsCount += substr_count($string, $item);
}
echo "The item appears $appearsCount times";
答案 0 :(得分:2)
您可能会发现正则表达式很有用:
$items = array('abc', 'def', 'ghi', 'etc');
$string = 'This is a string of text containing random abc def';
$appearsCount = count(preg_split('/'.implode('|', $items).'/', $string)) - 1;
当然,您必须注意不要使正则表达式无效。 (例如,如果它们在正则表达式的上下文中包含特殊字符,则需要正确转义$items
中的值。)
这是不与多个子字符串计数完全相同,因为重叠项目不会被基于正则表达式的拆分计算两次。
答案 1 :(得分:1)
最快,可能 - 至少你不可能通过任意输入获得更快的速度。但请注意,您可能不是entirely correct:
$appearsCount = 0;
$string = "How many times is 'cac' in 'cacac'?";
$items = array("cac");
foreach($items as $item)
{
$appearsCount += substr_count($string, $item);
}
echo "The item appears $appearsCount times";