本文详解如何将数据库中存储的 json 格式物品列表(如角色背包数据)安全解码并使用 foreach 循环逐项处理,避免因误用数组键名导致的错误。
你提供的 JSON 数据是一个索引数组(indexed array),而非关联数组——它由多个对象(PHP 中对应为关联数组)组成,外层没有 "name" 或其他顶层键。因此,直接写 $inventoryjson['name'] 会触发 Notice: Undefined index: name 错误,因为 $inv

✅ 正确做法是:先 json_decode($json, true) 得到 PHP 关联数组(实际是数值索引的数组),再用 foreach 遍历每一项:
$inventory = $karakter['inventory']; // 从数据库取出的 JSON 字符串
$items = json_decode($inventory, true);
// 检查解码是否成功(强烈建议!)
if (json_last_error() !== JSON_ERROR_NONE) {
throw new RuntimeException('Invalid JSON in inventory: ' . json_last_error_msg());
}
// 安全遍历每个物品
foreach ($items as $item) {
echo "名称: {$item['name']}, 数量: {$item['count']}, 槽位: {$item['slot']}\n";
// 处理可选字段(如 info 可能为字符串、数组或 null)
if (isset($item['info']) && is_array($item['info'])) {
echo " 附加信息: " . json_encode($item['info'], JSON_UNESCAPED_UNICODE) . "\n";
} elseif (is_string($item['info']) && !empty($item['info'])) {
echo " 说明: {$item['info']}\n";
}
}⚠️ 注意事项:
通过这种方式,你可以稳定、清晰地解析任意长度的 JSON 物品列表,并灵活访问每个字段,为库存管理、UI 渲染或服务端逻辑提供可靠数据基础。