使用PHP foreach遍历json数组

使用PHP foreach遍历json数组,php,json,Php,Json,所以我有一个类似这样的JSON { orderID: "8", ..... OrderLines: { OrderLine: [ { orderLineID: "42", quantity: "25", price: "0.69",

所以我有一个类似这样的JSON

    {
        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那么您只需使用不同的方法来确定是否只有一个或多个订单行。