PHP日历任务创建器:如何解决数组仅显示最后一项任务的问题?
问题分析
你的代码每次请求都会重新初始化$tasks数组,只存入当前提交的任务,所以之前的任务无法保留。要实现多任务存储,不用数据库的话,可以用Session临时存储或者本地文件持久化存储两种方案,下面分别给出实现方式:
方案一:用Session临时存储任务(会话级,关闭浏览器后丢失)
这种方式适合临时保存任务,不需要永久存储的场景:
- 在PHP代码最开头开启Session:
session_start();
- 替换原有的任务处理代码为以下内容:
// 初始化任务数组:如果Session中没有tasks,就创建空数组 if (!isset($_SESSION['tasks'])) { $_SESSION['tasks'] = []; } // 当有新任务提交时(task_name存在且不为空),添加到Session的任务数组 if (isset($_GET['task_name']) && !empty($_GET['task_name']) && isset($_GET['day'], $_GET['month'], $_GET['year'])) { $newTask = [ 'name' => $_GET['task_name'], 'day' => $_GET['day'], 'month' => $_GET['month'], 'year' => $_GET['year'] ]; $_SESSION['tasks'][] = $newTask; } // 显示任务 echo "<h2>Tasks</h2>"; echo "<table>"; echo "<tr><th>Task Name</th><th>Date</th></tr>"; // 遍历Session中的任务数组 foreach ($_SESSION['tasks'] as $task) { echo "<tr>"; echo "<td>{$task['name']}</td>"; echo "<td>{$task['day']}/{$task['month']}/{$task['year']}</td>"; echo "</tr>"; } echo "</table>";
方案二:用JSON文件持久化存储任务(永久保存,除非删除文件)
如果需要任务永久保存,推荐用JSON文件存储(确保PHP对当前目录有读写权限):
替换原任务处理代码为:
$taskFile = 'tasks.json'; // 初始化任务数组:读取文件,不存在则创建空数组 $tasks = []; if (file_exists($taskFile)) { $jsonContent = file_get_contents($taskFile); $tasks = json_decode($jsonContent, true) ?: []; } // 当有新任务提交时,添加到数组并写入文件 if (isset($_GET['task_name']) && !empty($_GET['task_name']) && isset($_GET['day'], $_GET['month'], $_GET['year'])) { $newTask = [ 'name' => $_GET['task_name'], 'day' => $_GET['day'], 'month' => $_GET['month'], 'year' => $_GET['year'] ]; $tasks[] = $newTask; // 格式化JSON后写入文件,方便查看 file_put_contents($taskFile, json_encode($tasks, JSON_PRETTY_PRINT)); } // 显示任务 echo "<h2>Tasks</h2>"; echo "<table>"; echo "<tr><th>Task Name</th><th>Date</th></tr>"; foreach ($tasks as $task) { echo "<tr>"; echo "<td>{$task['name']}</td>"; echo "<td>{$task['day']}/{$task['month']}/{$task['year']}</td>"; echo "</tr>"; } echo "</table>";
原代码的两个关键错误修正
- 原代码中
'name' => '$task_name'用了单引号,变量不会被解析,应该直接传入$task_name; - 遍历任务时用了
{$task_name},应该改为{$task['name']},否则会一直显示最后提交的任务名。
内容的提问来源于stack exchange,提问作者buffalo09
相关产品推荐
相关产品推荐

