1

文字列と値の配列があります。配列内のアイテムが文字列内に何回表示されるかを確認したいと思います。

これはこれを行うための最速の方法ですか?

$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";
4

2 に答える 2

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(つまり、正規表現のコンテキストで特殊文字が含まれている場合は、の値を適切にエスケープする必要があります。)

また、これは複数の部分文字列のカウントと完全に同じではありません。重複するアイテムは、正規表現ベースの分割では2回カウントされないためです。

于 2012-05-22T05:46:18.057 に答える
1

最速、おそらく-少なくとも、任意の入力ではるかに速くなる可能性は低いです。ただし、完全に正しいとは限らないことに注意してください。

$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";
于 2012-05-22T01:58:09.623 に答える