PHP处理JSON响应中EAN/PLU数组字段取值问题求助
解决JSON数组字段(ean/plu)被转为布尔值的问题
问题根源在于:你直接将数组类型的ean和plu字段赋值给变量,当后续存入数据库时,PHP会自动把非空数组转换为布尔值true(对应数据库中的1),空数组转换为false(对应数据库中的0),导致无法正确存储实际值。
解决方案
针对数组类型的字段,需要显式提取数组内的元素,同时处理空数组的场景:
- 如果
ean数组只会有单个元素,直接取第一个元素;若为空数组,可设为null或空字符串(根据数据库字段定义调整) plu字段同理,根据业务需求处理空数组的情况
修改后的代码示例
$data = json_decode($response, true); foreach($data["data"] as $row){ $categoryid = $row["_categoryId"]; $productid = $row["id"]; $name = $row["name"]; // 处理ean字段:取第一个元素,空数组则设为null $ean = !empty($row["ean"]) ? $row["ean"][0] : null; // 处理plu字段:空数组设为null,若有多个元素可改用implode(',', $row["plu"])转为字符串 $plu = !empty($row["plu"]) ? $row["plu"][0] : null; $externalid = $row["externalId"]; $units = $row["unit"]; $unitsmeasurment = $row["unitMeasurement"]; $packaging = $row["packaging"]; $packagingmeasurment = $row["packagingMeasurement"]; }
扩展说明
如果ean或plu数组可能包含多个元素,可使用implode()将数组转为逗号分隔的字符串,比如:
$ean = !empty($row["ean"]) ? implode(',', $row["ean"]) : null;
这样能把多个值合并为一个字符串存入数据库,后续读取时也可以用explode()拆分。
内容的提问来源于stack exchange,提问作者Jiří Liška
相关产品推荐
相关产品推荐

