Php 值为数组时,通过json的循环显示错误
我有一个JSON文件,我试图编写一个脚本来循环JSON文件。 我被困在value包含多个图像的部分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" :
[
{
"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属性应该始终存在。