使用PHP foreach浏览json数组

时间:2015-01-27 20:47:03

标签: php json

所以我有一个像这样的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"
                },
               ...
            ]
        }
    }

但是当它只有一个orderLine看起来像这样

    {
        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时它会给我正确的结果(我从每个订单行获得所需的数据),但是当它只是订单中的一个项目时,它会通过该数组1个订单行并给我错误的数据。

foreach ($orderLines['OrderLine'] as $orderLine) {
               echo $orderLine['quantity'];
               echo $orderLine['numReceived'];
}

我应该怎么知道当它只有1个命令从这个数组中给我正确的行时?

1 个答案:

答案 0 :(得分:1)

假设您已经使用json_decode()将此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;
}