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
相关产品推荐
相关产品推荐

