【问题标题】:php sub string count find many wordsphp子字符串计数找到很多单词
【发布时间】:2015-08-08 15:04:14
【问题描述】:

php

<?php
$tt1="b a b c";
echo substr_count($tt1,"a"or"b");
?>

由于这个词同时具有 a 和 b,我希望结果为 3。我试图将输出设为 3。但我得到 0。请帮助

【问题讨论】:

  • 这只是一个例子还是您实际上是在寻找单个字符?
  • 表达式"a" or "b" 将在那里变成1
  • 因为它有两个 b 和一个 a 我需要答案为 3。

标签: php substring


【解决方案1】:

substr_count 只会查找一个子字符串。

  • 你不能让它同时搜索两个字符串。
  • 如果你真的想要,最简单的选择就是调用它两次。 (见RiggsFollys´ answer。)

较短的选项是使用preg_match_all 代替(返回计数):

$count = preg_match_all("/a|b/", $tt1);

(它也只是在寻找替代品时遍历字符串。更容易适应更多子字符串。可能会寻找单词\b 边界等。但只有在您之前听说过/读过正则表达式时才建议使用。)

【讨论】:

  • 我很想知道什么更快/更有效。运行函数几次或加载正则表达式引擎?有什么想法吗?
  • 只值得用一个真实的例子来分析。字符串搜索是 PCRE 虚拟机的领域,通常比 PHP 虚拟机更快地执行循环和字符串比较。然而,只有更长的输入和替代方案才会引起注意。
【解决方案2】:

你可以试试

<?php
$tt1="b a b c";
echo substr_count($tt1,'a') + substr_count($tt1,'b');
?>

或添加计算任意数量字符的可能性

<?php
function substr_counter($haystack, array $needles)
{
    $cnt = 0;
    foreach ( $needles as $needle) {
        $cnt += substr_count($haystack, $needle);
    }
    return $cnt;
}

$tt1="b a b c";
$total = substr_counter( $tt1, array('a', 'b') );
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多