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

PHP中用foreach遍历JSON报错:未定义数组键'name'

问题解决:PHP解析cats.json展示猫咪列表错误修复

错误原因

你当前的代码直接遍历了解码后的整个JSON数组,但实际上JSON的顶层结构是一个包含cats键的对象,对应的才是猫咪数据的数组。直接遍历$cats_json会先拿到cats这个键对应的完整数组,此时尝试访问$cat['name']自然会报错——因为$cat是整个猫咪列表数组,而非单个猫咪对象。

修正后的完整代码

<?php
$cats_file = './_inc/cats.json';
// 检查文件是否存在且可读
if (!file_exists($cats_file) || !is_readable($cats_file)) {
    echo "无法读取猫咪数据文件";
    exit;
}

$cats_data = file_get_contents($cats_file);
// 检查JSON解码是否成功
$cats_json = json_decode($cats_data, TRUE);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON解码失败:" . json_last_error_msg();
    exit;
}

// 确保cats数组存在且格式正确
if (!isset($cats_json['cats']) || !is_array($cats_json['cats'])) {
    echo "猫咪数据格式错误";
    exit;
}

// 遍历真正的猫咪列表数组
foreach ($cats_json['cats'] AS $cat):
?>

<div>猫咪信息卡片</div>
<h3><strong><?php echo htmlspecialchars($cat['name']);?></strong></h3>
<p>品种:<?php echo htmlspecialchars($cat['type']);?></p>
<p>性别:<?php echo htmlspecialchars($cat['sex']);?></p>
<p>ID:<?php echo htmlspecialchars($cat['id']);?></p>
<div>卡片底部</div>

<?php endforeach;?>

关键优化点

  • 循环对象改为$cats_json['cats'],确保遍历的是单个猫咪对象
  • 增加文件存在性、可读性检查,避免路径错误导致的问题
  • 增加JSON解码错误检查,方便快速排查格式问题
  • 使用htmlspecialchars()输出内容,避免XSS注入风险(前端输出的最佳实践)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:37:11