
本文旨在帮助开发者掌握如何使用PHP处理从数据库获取的JSON数组数据,并在此基础上,通过计算时间差,将“时间前”的概念整合到原始JSON数组中,最终生成包含id、CreatedAt和Time字段的JSON数据,以便在应用程序中更友好的展示评论时间。
在PHP中,处理JSON数据并对其进行修改是一项常见的任务。以下是如何将时间信息合并到从数据库获取的JSON数组中的详细步骤。
1. 获取JSON数据
首先,从数据库获取数据并将其编码为JSON格式。假设你已经有了一个名为 $CommentTime 的数组,它包含了从数据库中提取的评论数据。
立即学习“PHP免费学习笔记(深入)”;
$CommentTime= $this->M_main->GetFeedsCommentTime($FeedId); echo json_encode($CommentTime);
这段代码将 $CommentTime 数组转换为JSON字符串并输出。 $CommentTime 数组的结构如下:
[
{"id":"475","CreatedAt":"1636953999"},
{"id":"474","CreatedAt":"1636953988"},
{"id":"473","CreatedAt":"1636953977"}
]2. 遍历数组并计算时间差
接下来,使用 foreach 循环遍历数组,并计算每条评论的“时间前”表示。关键在于使用 &$cmt 引用传递,这样可以直接修改原始数组中的元素。
foreach($CommentTime as &$cmt) {
$CreatedAt = $cmt['CreatedAt'];
$PostedAts = $CreatedAt;
$time_ago = $PostedAts;
$cur_time = time();
$time_elapsed = $cur_time - $time_ago;
$seconds = $time_elapsed ;
$minutes = round($time_elapsed / 60 );
$hours = round($time_elapsed / 3600);
$days = round($time_elapsed / 86400 );
$weeks = round($time_elapsed / 604800);
$months = round($time_elapsed / 2600640 );
$years = round($time_elapsed / 31207680 );
// Seconds
if($seconds <= 60){
$PostedTime= "just now";
}
//Minutes
else if($minutes <=60){
if($minutes==1){
$PostedTime= "one minute ago";
} else{
$PostedTime= "$minutes minutes ago";
}
}
//Hours
else if($hours <=24){
if($hours==1){
$PostedTime= "an hour ago";
}else{
$PostedTime= "$hours hrs ago";
}
}
// 将计算出的时间信息添加到数组元素中
$cmt['Time'] = $PostedTime;
}3. 输出结果
现在,$CommentTime 数组已经包含了 Time 字段,你可以将其编码为JSON并输出。
echo json_encode($CommentTime);
输出结果如下:
[
{"id":"475","CreatedAt":"1636953999","Time":"5 minutes ago"},
{"id":"474","CreatedAt":"1636953988","Time":"10 minutes ago"},
{"id":"473","CreatedAt":"1636953977","Time":"15 minutes ago"}
]注意事项:
- 时区问题: time() 函数返回的是服务器的当前时间戳。如果你的数据库中的时间戳存储的是UTC时间,你需要先将其转换为服务器所在的时区,再进行时间差计算,以保证结果的准确性。
- 数据类型: 确保 $CreatedAt 字段的值是整数类型的时间戳。如果它是字符串类型,你需要使用 intval() 或 (int) 将其转换为整数。
- 性能优化: 如果你需要处理大量的评论数据,可以考虑使用更高效的时间计算方法,例如使用 DateTime 类。
总结:
通过使用 foreach 循环和引用传递,我们可以方便地修改JSON数组中的元素,并将计算出的时间信息添加到数组中。这种方法简单易懂,适用于大多数情况。 记得在实际应用中处理时区和数据类型,以确保结果的准确性。










