PHP如何替换特定字符后的字符串 实现指定学生成绩追加更新
PHP 给指定学生追加成绩的实现方案
问题场景
现有存储学生成绩的字符串,格式如下:student1: A, B, D; student2: A, A, C; student3: F, F, D
需要实现:指定任意学生名、任意待追加成绩,在该学生原有成绩的末尾追加新成绩,最终保持原有字符串格式不变。
实现思路
- 先按固定分隔符
;拆分字符串,得到每个学生独立的「姓名-成绩」条目 - 遍历拆分后的条目,匹配到目标学生对应的条目
- 对匹配到的条目,在成绩段末尾拼接新的成绩
- 将所有处理完成的条目按原有格式重新拼接为完整字符串
可直接复用的代码
<?php // 原始成绩字符串 $rawScore = 'student1: A, B, D; student2: A, A, C; student3: F, F, D'; /** * 给指定学生追加成绩 * @param string $origin 原始成绩字符串 * @param string $studentName 目标学生名称,例:student1 * @param string $newScore 待追加的成绩,例:A * @return string 处理完成的成绩字符串 */ function addStudentScore(string $origin, string $studentName, string $newScore): string { // 拆分所有学生条目,过滤首尾空格、空值 $itemList = array_filter(array_map('trim', explode(';', $origin))); $result = []; foreach ($itemList as $item) { // 拆分姓名和成绩段 [$name, $scorePart] = array_map('trim', explode(':', $item)); // 匹配到目标学生则追加成绩 if ($name === $studentName) { $scorePart = sprintf('%s, %s', $scorePart, $newScore); } $result[] = sprintf('%s: %s', $name, $scorePart); } // 拼接回原格式 return implode('; ', $result); } // 调用示例1:给student1追加A echo addStudentScore($rawScore, 'student1', 'A'); // 输出:student1: A, B, D, A; student2: A, A, C; student3: F, F, D // 调用示例2:给student3追加C echo addStudentScore($rawScore, 'student3', 'C'); // 输出:student1: A, B, D; student2: A, A, C; student3: F, F, D, C
扩展说明
- 如果需要避免重复追加相同成绩,可以在追加前把成绩段按
,拆分为数组,判断新成绩不存在时再执行拼接 - 如果传入的目标学生名不存在,函数会原样返回原始字符串,不会产生异常格式数据
内容的提问来源于stack exchange,提问作者heloboy
相关产品推荐
相关产品推荐

