如何用PHP从.txt文件中列出今日过生日人员的姓名?
解决PHP遍历生日列表只显示一个姓名的问题
你的代码问题在于每次找到符合条件的用户时,都会直接覆盖$message变量,导致最终只保留最后一个匹配的姓名。要显示所有今日过生日的人,需要用数组来存储所有匹配的姓名,最后再统一输出。
以下是优化后的代码,使用foreach遍历更简洁:
// 读取文件内容,同时去除每行末尾的换行符 $birthdayLines = array_map('trim', file('birthday.txt')); $today = date('m-d'); // 初始化数组存储今日过生日的人员姓名 $todayBirthdays = []; // 遍历每一条生日记录 foreach ($birthdayLines as $line) { // 按分隔符分割数据 $info = explode('|', $line); // 确保数据格式正确,避免索引越界 if (count($info) >= 3) { // 提取生日的月-日部分 $birthDatePart = substr($info[0], 5); if ($birthDatePart === $today) { // 将符合条件的姓名加入数组 $todayBirthdays[] = $info[1]; } } } // 生成输出消息 if (empty($todayBirthdays)) { $message = "今日没有过生日的人员"; } else { $message = "今日过生日的人员:" . implode(",", $todayBirthdays); } return $message;
关键改进点:
- 使用数组
$todayBirthdays存储所有匹配的姓名,避免覆盖之前的结果 - 用
array_map('trim', ...)处理读取的文件行,去除多余的换行符 - 增加格式校验
count($info) >= 3,防止因文件格式错误导致的报错 - 最后通过
implode()将数组中的姓名拼接成字符串输出
内容的提问来源于stack exchange,提问作者Nightmaster
相关产品推荐
相关产品推荐

