Php 值为数组时,通过json的循环显示错误

Php 值为数组时,通过json的循环显示错误,php,json,Php,Json,我有一个JSON文件,我试图编写一个脚本来循环JSON文件。 我被困在value包含多个图像的部分 [ { "id" : "1", "name" : "Michel", "value" : "Michel is from US" }, { "id" : "2", "value" : "Marko is from German", "name" : "Marko" }, { "id" : "3", "name" :

我有一个JSON文件,我试图编写一个脚本来循环JSON文件。 我被困在value包含多个图像的部分

[
  {
    "id" : "1",
    "name" : "Michel",
    "value" : "Michel is from US"
  },
  {
    "id" : "2",
    "value" : "Marko is from German",
    "name" : "Marko"
  },
  {
    "id" : "3",
    "name" : "Adam",
    "value" : "Adam is from France"
  },

  {
   "id" : "4",
    "name" : "Photos",
    "value" : [
          {
            "image" : "images/michel.jpg"
          },
          {
            "image" : "images/marko.jpg"
          },
          {
            "image" : "images/adam.jpg"
          }
        ]
    },
{
    "id" : "5",
    "name" : "MARKO",
}
{


      "id" : "6",
        "name" : "EDDI",
        "value" : [


    "001",
      "002"
    ],
    }
Json文件看起来像上面写的

$json = file_get_contents("json/example.json");

// Convert JSON string to Object
$object = json_decode($json);

foreach($object as $key => $value) {
    echo $value->name. ", " . $value->value . "<br>";
}
我得到了我应该得到的,除了包含更多图像的值,对于这部分,它显示错误

foreach($object as $key => $value) {
    echo $value->name. ", " . $value->value . "<br>";
}
错误:

注意:C:\xampp\htdocs\test\index.php中的数组到字符串转换 第19行

注意:中未定义的属性:stdClass::$value 第19行的C:\xampp\htdocs\test\index.php

如果值不存在,我只需要打印名称,值将为空


欢迎提供任何建议

首先检查“值”是否为使用is\U数组的数组。之后,创建内部循环以循环“值”内容

    foreach($object as $key => $value) {
        if(isset($value->value)){
            if(is_array($value->value)){
                foreach($value->value as $key => $val){
                    if(is_object($val)){
                        $stdArray   = (array) $val;
                        $arrayKey   = array_keys($stdArray)[0];
                        echo 'With image value: '. $value->name. ", " . $val->$arrayKey . "<br>";
                    }else{
                        echo 'Single value array: ' . $val . '<br />';
                    }
                }
            }else{
                echo 'Value without image value: '. $value->name. ", " . $value->value . "<br>";
            }
        }else{
            echo 'Only Name If there are no value key exists: ' . $value->name . '<br />';
        }
    }
注意:C:\xampp\htdocs\test\index.php中的数组到字符串转换 第19行

尝试回显阵列时会发生此错误。因此,请始终使用is_array函数检查您尝试回显的变量是否为array

注意:第19行C:\xampp\htdocs\test\index.php中未定义的属性:stdClass::$value


当您尝试使用未定义的数组键时,会发生此错误。

此解决方案适用于我:

foreach ($object as $wizard) {

    if(is_array($wizard['value'])){

        foreach($wizard['value'] as $key => $val){ 

            $stdArray   = (array) $val;

            foreach($stdArray as $std){

                if(empty($std)){                    
                    $array[] = array($wizard['title'], $val);
                }

                else{ 
                    $array[] = array($wizard['title'], $std);
                }

            } 
        }

    }
    else{ 
        $array[] = array($wizard['title'], $wizard['value']); 
    } 
}

你好@Gabriel,它不起作用。我得到通知:C:\xampp\htdocs\test\index.php中的数组到字符串转换在线26@MuLem现在检查,我已经更新了。我不知道你已经更新了你的问题。@Gabriel太好了,我只添加了一个错误,在值中我有这个值:[001,002]你必须搜索数组键并使用它。这样它将是动态的,不管它有什么键,它都不会失败。学习对你有好处。无论如何,我已经更新了答案。注意:试图在中获取非对象的属性,并且可捕获致命错误:stdClass类的对象无法在中转换为字符串。除了jsonUndefined属性中的最后一个参数表示JSON格式不正确或使用不正确之外,一切都很好。否则,根据您展示的示例,value和name属性应该始终存在。