PHP数组搜索统计函数问题求助:统计指定字符串出现次数
帮你排查函数返回0的问题
嘿,我一眼就看到几个导致你的函数始终返回0的问题,咱们一个个来解决:
1. 变量名不匹配,根本没用到传入的数组
你函数的第一个参数是$searchVPNArrayResults,但在foreach循环里却用了$vpnSessionArray——这俩变量名完全不一样啊!函数里根本没使用你传入的目标数组,反而可能在引用一个未定义的外部变量,这肯定统计不到任何内容。
2. 大小写敏感导致匹配失败
strpos()是区分大小写的字符串查找函数,你把$may设为小写的'may',但你的数组条目里是'May'(首字母大写),所以strpos会判定这两个字符串不匹配,自然计数一直是0。
3. 冗余的参数赋值
你在函数定义里声明了$may参数,但紧接着就在函数内部把它赋值为'may',这直接覆盖了传入的参数值,完全没必要保留这个参数(除非你想让搜索词可配置,那就别在内部硬赋值)。
修正后的代码
这里给你两种方案,第一种是针对统计May的专用函数,第二种是更通用的可配置版本:
专用统计May的版本
<?php function MayVPNCount($vpnSessionArray) { $maycount = 0; foreach($vpnSessionArray as $oneVPNSession){ // 使用stripos不区分大小写,避免大小写差异导致的匹配失败 if (stripos($oneVPNSession->logoutTime, 'May') !== false) { $maycount += 1; } } return $maycount; } ?>
通用统计任意月份的版本(更推荐)
<?php function countVPNByMonth($vpnSessionArray, $targetMonth) { $count = 0; foreach($vpnSessionArray as $oneVPNSession){ if (stripos($oneVPNSession->logoutTime, $targetMonth) !== false) { $count += 1; } } return $count; } // 调用示例:统计May的次数 $mayCount = countVPNByMonth($yourActualVPNArray, 'May'); echo $mayCount; // 现在应该能得到正确的4啦 ?>
内容的提问来源于stack exchange,提问作者docwobster
相关产品推荐
相关产品推荐

