使用PHP foreach遍历json数组
所以我有一个类似这样的JSON使用PHP foreach遍历json数组,php,json,Php,Json,所以我有一个类似这样的JSON { orderID: "8", ..... OrderLines: { OrderLine: [ { orderLineID: "42", quantity: "25", price: "0.69",
{
orderID: "8",
.....
OrderLines: {
OrderLine: [
{
orderLineID: "42",
quantity: "25",
price: "0.69",
originalPrice: "0.69",
checkedIn: "2",
numReceived: "0",
timeStamp: "2015-01-03T19:37:38+00:00",
orderID: "8",
itemID: "43944"
},
{
orderLineID: "44",
quantity: "75",
price: "0.69",
originalPrice: "0.69",
checkedIn: "25",
numReceived: "0",
timeStamp: "2015-01-07T20:07:29+00:00",
orderID: "8",
itemID: "43948"
},
...
]
}
}
但当只有一个订单行时,看起来是这样的
{
orderID: "20",
....
OrderLines: {
OrderLine: {
orderLineID: "118",
quantity: "24",
price: "9",
originalPrice: "9",
checkedIn: "44",
numReceived: "0",
timeStamp: "2015-01-20T19:22:54+00:00",
orderID: "20",
itemID: "37826"
}
}
}
当我在第一种情况下使用foreach时,它会给我正确的结果(我从每个订单行获取所需的数据),但当订单中只有一个项目时,它会遍历该订单行的数组,并给我错误的数据
foreach ($orderLines['OrderLine'] as $orderLine) {
echo $orderLine['quantity'];
echo $orderLine['numReceived'];
}
我应该如何让它知道,当它只有一个命令时,从这个数组中给我恰好正确的行 假设您已经在使用将此JSON转换为PHP数组/对象,您可以检查OrderLine是否为数组,并且只有在这种情况下才执行循环:
if (is_array($orderLines['OrderLine']) {
foreach ($orderLines['OrderLine'] as $orderLine) {
echo $orderLine->quantity;
echo $orderLine->numReceived;
}
} else {
echo $orderLines['OrderLine']->quantity;
echo $orderLines['OrderLine']->numReceived;
}
JSON从何而来?你能编辑一下吗?我认为您首先应该保持结构不变。什么是
错误的数据
和正确的行
?您看过json_decode()
:解码到本机php数组,然后检查$decoded['OrderLines']['OrderLine']
是数组还是stdclass对象?使用php json_decode和json_encode函数仍然返回true,因为它是数组。在第一种情况下,它是一个订单行数组,在第二种情况下,它只是一个订单行数组orderline@user3862703您使用的是json\u decode()
?如果是这样的话,[]
所包含的内容应该是数组,{}
所包含的内容应该是stdClass对象。或者将其转换为数组以避免使用is_array
方法。@Ortix92那么您只需使用不同的方法来确定是否只有一个或多个订单行。