PHP统计长度8-10且首字母为S的单词数及CSV处理方案问询
普通TXT文件统计实现
你需要在拆分单词后,逐个判断是否符合过滤条件,再累加符合条件的数量,而非直接累加所有单词总数。修改后的代码如下:
<?php $count = 0; $file = fopen("data.txt", "r"); while (($line = fgets($file)) !== false) { // 按空格拆分单词 $words = explode(" ", $line); foreach ($words as $word) { // 去除单词两端的空白、标点符号,避免干扰统计 $cleanWord = trim($word, " \t\n\r\0\x0B.,!?;:\"'()[]{}"); // 跳过清洗后为空的无效值 if (empty($cleanWord)) continue; // 两个过滤条件判断:长度8-10、首字母为S // 如需不区分大小写匹配s开头,可改成strtoupper($cleanWord)[0] == 'S' $len = strlen($cleanWord); if ($len >=8 && $len <=10 && substr($cleanWord, 0, 1) == 'S') { $count++; } } } echo "符合条件的单词数量:" . $count; fclose($file); ?>
核心逻辑说明:
- 用
strlen()获取单词字符长度,判断是否处于8到10的闭区间内 - 用
substr($cleanWord, 0, 1)提取单词首字符,和目标字符'S'比较完成匹配
CSV文件统计实现
CSV属于结构化文件,需要先解析每行的字段内容,再提取单词做统计,核心过滤逻辑和TXT文件完全一致,只需要调整文件读取逻辑即可,代码如下:
<?php $count = 0; // 打开CSV文件,如果你的CSV有自定义分隔符、包裹符,可在fgetcsv参数中调整 $file = fopen("data.csv", "r"); while (($row = fgetcsv($file)) !== false) { // 遍历CSV每行的所有字段 foreach ($row as $fieldContent) { // 拆分单个字段内容为单词 $words = explode(" ", $fieldContent); foreach ($words as $word) { $cleanWord = trim($word, " \t\n\r\0\x0B.,!?;:\"'()[]{}"); if (empty($cleanWord)) continue; $len = strlen($cleanWord); if ($len >=8 && $len <=10 && substr($cleanWord, 0, 1) == 'S') { $count++; } } } } echo "CSV文件中符合条件的单词数量:" . $count; fclose($file); ?>
内容的提问来源于stack exchange,提问作者Praff
相关产品推荐
相关产品推荐

