You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP对象数组经JSON写入txt后无法遍历读取属性如何解决?

问题原因
  • file() 函数返回值是按行拆分的字符串数组,你写入的JSON内容为整行存储,此时$read数组仅第一个元素是完整JSON字符串,直接遍历$read拿到的$i为字符串类型,不存在price属性,这是报错的直接原因。
  • json_encode 序列化PHP自定义类对象时,默认仅序列化公共属性,不会保留类标识,直接json_decode得到的是stdClass类实例,并非原Item类的实例,若需要还原为原类对象需要额外处理。
修复方案

方案1:直接解析JSON读取属性(无需还原为Item类)

读取文件时使用file_get_contents获取完整JSON字符串,解析后即可访问属性:

// 读取完整文件内容
$jsonContent = file_get_contents("ProducePrice.txt");
// 解析JSON,默认返回stdClass对象数组
$produceList = json_decode($jsonContent);

foreach($produceList as $item) {
    echo $item->price;
}

方案2:还原为原Item类实例

如果需要得到原Item类的对象,可选择以下两种实现:

方式A:使用serialize/unserialize序列化(仅适合PHP生态内使用)

// 写入时序列化对象数组
file_put_contents("ProducePrice.txt", serialize($produceList));
// 读取时反序列化直接得到Item类对象数组
$produceList = unserialize(file_get_contents("ProducePrice.txt"));

foreach($produceList as $item) {
    echo $item->price;
}

方式B:JSON解析后手动转换为Item实例

$jsonContent = file_get_contents("ProducePrice.txt");
// 解析为关联数组
$tempList = json_decode($jsonContent, true);
$produceList = [];
foreach($tempList as $temp) {
    $produceList[] = new Item($temp['name'], $temp['price']);
}

foreach($produceList as $item) {
    echo $item->price;
}

内容的提问来源于stack exchange,提问作者user14849955

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:18:00