JSON到PHP数组获取;试图获取“中非对象的属性”;错误
您好,我有这样的Json:JSON到PHP数组获取;试图获取“中非对象的属性”;错误,php,json,Php,Json,您好,我有这样的Json: [{ "exam_code": "1", "name": "Name1", "surname": "Surname1", "father_name": "Fname1", "id_number": "211111", "district_number": "21", "school_number": "025", "gender": "F", "variant": "A", "grade"
[{
"exam_code": "1",
"name": "Name1",
"surname": "Surname1",
"father_name": "Fname1",
"id_number": "211111",
"district_number": "21",
"school_number": "025",
"gender": "F",
"variant": "A",
"grade": "4",
"sector": "A",
"foreign_language": "I",
"answerList": {
"gradeFour": {
"lesson1": ["A", "C", "C", "C", "A", "A", "B", "B", " ", "C", "C", "B", "A", "C", "C", "B", "B", "C", "B", "A"],
"lesson2": ["B", "A", " ", "C", " ", "B", " ", "B", "B", "C", " ", " ", "B", "A", "A", "A", "C", "A", "B", "B"],
"lesson3": ["A", "C", "B", "B", "A", "A", "C", "A", "C", "C"],
"lesson4": ["B", "B", "A", "B", "B"],
"lesson5": ["B", "A", "A", "B", "B"],
"lesson6": ["B", "A", "A", "B", "A", "B", "A", "A", "C", "B"]
}
}
}]
$msc = microtime(true);
$array = (json_decode($raw_str,true));
foreach($array as $value){
echo $value['id_number'];
echo '<br/>';
foreach($value['answerList']['gradeFour'] as $course){
foreach($course as $val){
echo $val;
}
}
echo '<br>---------------------------';
echo '<br>';
}
我试图在foreach循环中打印课程答案
请输入以下代码:
<?php
$msc = microtime(true);
$array = (json_decode($raw_str,true));
foreach($array as $value){
echo $value['id_number'];
echo '<br/>';
foreach($value -> answerList->gradeFour as $val){
echo $val;
}
echo '<br>---------------------------';
echo '<br>';
}
$msc = microtime(true)-$msc;
echo ($msc * 1000) . ' ms'; // in millseconds
?>
但是得到这个错误
注意:尝试在中获取非对象的属性
第50行的G:\xampp\htdocs\siec\string\u test.php注意:尝试获取
G:\xampp\htdocs\siec\string\u test.php联机中非对象的属性
50警告:中为foreach()提供的参数无效
第50行的G:\xampp\htdocs\siec\string\u test.php
在第二个
foreach
循环中,$value
是一个数组。因此,您必须将其与括号一起使用[]
而不是->
:
foreach($value['answerList']['gradeFour'] as $val) {
您的代码有两个问题:
- 首先,您必须使用括号而不是->
- 其次,您需要使用嵌套循环(两个for)打印成绩,因为您有多个课程(另一个数组)的多个成绩(一个数组)
[{
"exam_code": "1",
"name": "Name1",
"surname": "Surname1",
"father_name": "Fname1",
"id_number": "211111",
"district_number": "21",
"school_number": "025",
"gender": "F",
"variant": "A",
"grade": "4",
"sector": "A",
"foreign_language": "I",
"answerList": {
"gradeFour": {
"lesson1": ["A", "C", "C", "C", "A", "A", "B", "B", " ", "C", "C", "B", "A", "C", "C", "B", "B", "C", "B", "A"],
"lesson2": ["B", "A", " ", "C", " ", "B", " ", "B", "B", "C", " ", " ", "B", "A", "A", "A", "C", "A", "B", "B"],
"lesson3": ["A", "C", "B", "B", "A", "A", "C", "A", "C", "C"],
"lesson4": ["B", "B", "A", "B", "B"],
"lesson5": ["B", "A", "A", "B", "B"],
"lesson6": ["B", "A", "A", "B", "A", "B", "A", "A", "C", "B"]
}
}
}]
$msc = microtime(true);
$array = (json_decode($raw_str,true));
foreach($array as $value){
echo $value['id_number'];
echo '<br/>';
foreach($value['answerList']['gradeFour'] as $course){
foreach($course as $val){
echo $val;
}
}
echo '<br>---------------------------';
echo '<br>';
}
$msc=microtime(真);
$array=(json_decode($raw_str,true));
foreach($array作为$value){
echo$value['id_number'];
回声“
”;
foreach($value['answerList']['gradeFour']作为$course){
foreach(课程名称为$val){
echo$val;
}
}
回音“
------------------------------”;
回声“
”;
}
第5行中的问题
必须将其解码为关联数组
阅读
检查下面的代码,它将帮助您更好地理解
$array = json_decode($raw_str);
foreach($array as $value){
echo $value->id_number;
echo '<br/>';
foreach($value->answerList->gradeFour as $key => $val){
echo $key;
echo "<pre>";
print_r($val);
echo "</pre>";
}
echo '<br>---------------------------';
echo '<br>';
}
$array=json\u decode($raw\u str);
foreach($array作为$value){
echo$value->id\u编号;
回声“
”;
foreach($value->answerList->grade4as$key=>$val){
echo$key;
回声“;
印刷费($val);
回声“;
}
回音“
------------------------------”;
回声“
”;
}
开始使用$value['id\u number']
,然后切换到对象符号访问($value->answerList
),可以使用其中一个(取决于json\u decode()
的第二个参数)这种方法对原始代码增加了太多的更改:这必须改变他获取id\u number
的方式,以及他从json转换的方式。原始代码显然需要数组作为json\u decode
的结果,因此转换代码的其他部分是错误的。此外,这个答案只是简单地丢弃了整个分数数组,他在没有被问到的时候添加了pre
标签。谢谢你的回复。。。Solved@fischer伟大的您可以接受答案,作为下一位访客的指南。是否可以使用foreach($value['answerList']['gradeFour']作为$course){as foreach($value['answerList'][0]作为$course){因为四年级五年级的学生dynamic@fischer不,您不能使用数字访问命名数组。但是,您也可以在answerList
上迭代。例如foreach($value['answerList']as$numberCourses){
和在$numberCourses上迭代以获得$course,等等。