通过json的php foreach迭代
假设我从API获取了以下json响应通过json的php foreach迭代,php,json,foreach,Php,Json,Foreach,假设我从API获取了以下json响应 { "owner": "Jane Doe", "pets": [ { "color": "white", "type": "cat" }, { "color": "black", "type": "dog" } ] } 从下面的PHP代码中,我将json字符串转换为json对
{
"owner": "Jane Doe",
"pets": [
{
"color": "white",
"type": "cat"
},
{
"color": "black",
"type": "dog"
}
]
}
从下面的PHP代码中,我将json字符串转换为json对象。并显示宠物类型
$jsonObject = json_decode($json);
foreach($jsonObject->pets as $pets){
echo 'Pet type:'.$pets->type.'</br>';
}
在上述情况下,php foreach迭代失败,并显示以下消息
*注意:尝试获取非对象的属性*
我正在寻找一种简单的方法来实现这一点,因为我正在处理的实际json响应有很多这样的情况。您需要检查
$jsonObject->pets
是否是数组或对象。如果它是一个对象,用包含该对象的数组替换它,那么循环将工作
if (!is_array($jsonObject->pets)) {
$jsonObject->pets = array($jsonObject->pets);
}
您还可以在foreach
中使用条件:
foreach (is_array($jsonObject->pets) ? $jsonObject->pets : [jsonObject->pets] as $pet) {
...
}
如果您不想每次都写这些内容,可以将其放在函数中:
function as_array($x) {
return is_array($x) ? $x : [x];
}
然后使用:
foreach (as_array($jsonObject->pets) as $pet) {
...
}
我也会向API设计师投诉。返回这样不一致的数据格式是荒谬的。出于某种原因,他不想使用Is_array()任何推理运算?那么,这是最简单的方法吗?那么,这似乎是最好的方法。很抱歉,我想对此表示怀疑。为什么说
呢?因此,提供一个解决方案来访问上述json响应中的变量,而不使用?为什么不能使用if语句呢?我正在寻找一种简单的方法来实现这一点,因为我正在处理的实际json响应有很多这样的情况。检查某个东西是否是数组的最简单方法是使用if语句和is_数组。如果你需要做很多事情,把它放在函数中。
foreach (as_array($jsonObject->pets) as $pet) {
...
}