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

PHP中JSON转对象数组后foreach循环无输出问题排查

问题分析与解决

你的代码存在三个关键错误,导致没有输出:

1. json_decode 默认返回对象而非数组

json_decode($json) 不传递第二个参数时,会将JSON解码为stdClass对象,而非关联数组。你用数组下标$value['COD. CRISI']的方式访问对象属性是无效的,应该用对象属性访问符->。如果想直接得到关联数组,需要给json_decode传递第二个参数true:

$arraydati = json_decode($json, true);

2. foreach循环的变量使用错误

在foreach($arraydati as $key=>$value)中,$key是数组的索引值(0、1),不是元素本身。你错误地用$key['CODICE']来判断,实际应该用$value->CODICE(对象形式)或者$value['CODICE'](关联数组形式)。

3. 判断条件与需求不符

你要找的是CODICE值为25的元素,但代码里写的是$key['CODICE'] === '1',条件完全不匹配,自然不会触发输出。


修正后的代码

方式一:保持对象形式访问

$json = '[{"CODICE":"A","COD. CRISI":1},{"CODICE":"25","COD. CRISI":1}]';
$arraydati = json_decode($json);

foreach($arraydati as $key=>$value){
    if($value->CODICE === '25'){
        echo $value->{'COD. CRISI'}; // 带点的属性需要用花括号包裹
    }
}

方式二:解码为关联数组

$json = '[{"CODICE":"A","COD. CRISI":1},{"CODICE":"25","COD. CRISI":1}]';
$arraydati = json_decode($json, true);

foreach($arraydati as $item){
    if($item['CODICE'] === '25'){
        echo $item['COD. CRISI'];
    }
}

两种方式都能正确输出1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:32:14