- javascript对象数据合并实现补齐24小时时间段同时赋值0的解决方案(1)
- javascript对象数据合并实现补齐24小时时间段同时赋值0升级版解决方案(2)
项目需求
在php中使用mysql生成
arr = [{"dataKey": "00","totalTrans": "4","totalPays": "301.70"},{"dataKey": "01","totalTrans": "1","totalPays": "39.90"},{"dataKey": "03","totalTrans": "2","totalPays": "35.80"}]
json字符串。dataKey代表24小时的时间段,mysql读取到实际只有3个,如何按照格式补齐其他时间段的数。
解决放哪
使用PHP中的MySQL扩展和循环来生成这个JSON字符串。首先,从MySQL数据库中获取实际存在的时间段,并将它们放入一个数组中。然后,使用一个循环来遍历所有24个小时,并检查每个小时是否存在于数据数组中。如果不存在,添加一个新的对象到结果数组中,并将"totalTrans"和"totalPays"属性设置为0。最后,使用json_encode
函数将结果数组转换为JSON字符串。
以下是一个示例代码:
<?php
// 连接到MySQL数据库
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";$conn = new mysqli($servername, $username, $password, $dbname);// 检查连接是否成功
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}// 查询实际存在的时间段
$sql = "SELECT dataKey FROM your_table";
$result = $conn->query($sql);// 将实际存在的时间段放入一个数组中
$existingHours = [];
if ($result->num_rows > 0) {while ($row = $result->fetch_assoc()) {$existingHours[] = $row['dataKey'];}
}// 创建一个包含所有24个时间段的数组
$allHours = Array();
for ($i = 0; $i < 24; $i++) {$hour = str_pad($i, 2, '0', STR_PAD_LEFT);$allHours[] = $hour;
}// 创建一个新的数组,用于存放补齐后的数据
$filledData = [];// 遍历所有的时间段
foreach ($allHours as $hour) {// 如果这个时间段在实际存在的时间段中,就添加到新的数组中if (in_array($hour, $existingHours)) {$sql = "SELECT totalTrans, totalPays FROM your_table WHERE dataKey = '$hour'";$result = $conn->query($sql);if ($result->num_rows > 0) {$row = $result->fetch_assoc();$filledData[] = array("dataKey" => $hour,"totalTrans" => $row['totalTrans'],"totalPays" => $row['totalPays']);}} else {// 如果这个时间段在实际不存在的时间段中,就添加一个新的对象,但是totalTrans和totalPays为0$filledData[] = array("dataKey" => $hour,"totalTrans" => "0","totalPays" => "0.00");}
}// 将结果数组转换为JSON字符串
$jsonString = json_encode($filledData);// 输出JSON字符串
echo $jsonString;
?>
@漏刻有时