PHP中如何仅将数组内int类型的hour值转为字符串类型
问题场景
配置图表时,data.addColumn ('string', 'hour') 规则要求hour列值必须为字符串类型,但数据库查询返回的hour字段默认是int类型。
原有实现代码如下:
$temp_array = array(); while($row = mysqli_fetch_assoc($result)) { $temp_array = array(strval($row["hour"]), $row["min"], $row["max"], $row["Avg"]); }
运行后输出结果为"["6","30.0","30.0","30.0"],所有元素都被处理为带引号的字符串格式,不符合预期:仅需要第一个hour元素为字符串类型,其余min、max、Avg元素需要保持数值类型。
问题原因
mysqli_fetch_assoc扩展默认会将查询返回的所有字段值都转为字符串类型,不会自动匹配数据库中定义的int、float数值类型,因此哪怕不做任何转换,min、max、Avg字段拿到的也都是字符串值。- 原代码循环逻辑有误:每次循环直接对
$temp_array整体赋值,会覆盖之前循环存入的行数据,最终只能拿到查询结果的最后一行。
修复方案
对数值类字段手动强制转换为浮点型,同时修正循环的数组追加逻辑,代码如下:
$temp_array = array(); while($row = mysqli_fetch_assoc($result)) { // 逐行追加数据,避免覆盖 $temp_array[] = [ strval($row["hour"]), // hour字段强制转为字符串,匹配图表列要求 (float)$row["min"], // 温度最小值转为浮点数值类型 (float)$row["max"], // 温度最大值转为浮点数值类型 (float)$row["Avg"] // 平均温度转为浮点数值类型 ]; }
修复后再将数组转为JSON格式传给前端,输出结构为["6", 30.0, 30.0, 30.0],完全符合图表的列类型要求。
内容的提问来源于stack exchange,提问作者ArjanG
相关产品推荐
相关产品推荐

