Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON到PHP数组获取;试图获取“中非对象的属性”;错误_Php_Json - Fatal编程技术网

JSON到PHP数组获取;试图获取“中非对象的属性”;错误

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"

您好,我有这样的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": "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,等等。