警告:非法字符串偏移量 PHP 7 foreach

Warning: Illegal string offset PHP 7 foreach

使用 php 卷曲。我正在获取一组数据。我想从中获取以下数据

if(is_array($jsonRes['prod']['ret']['ProdIt'])){
    foreach($jsonRes['prod']['ret']['ProdIt'] as $obRes){
        $arP["ARTI"] = $obRes['Article'];
        $arP["ALT"] = $obRes['Name'];
        $arP["BR"] = $obRes['Brand'];

我收到一个错误:

警告:第 48 行

中 /......php 中的非法字符串偏移量 'Article'

警告:第 49 行

中 /................php 中的非法字符串偏移量 'Name'

警告:第 50

行 /................php 中的非法字符串偏移量 'Brand'

这是一个数组

Array
(
    [ret] => Array
        (
            [ProductsItemCount] => 1
            [ProdIt] => Array
                (
                    [Code] => 0789087
                    [Article] => 3011317
                    [Name] => Price cash
                    [Brand] => HATTAT
                    [Price] => 0
                    [Currency] => EUR
                    [Stock] => Array
                        (
                            [StockItem] => Array

错误并不总是发生。当一个数组看起来像这样时,它就没有错误

Array
(
    [ret] => Array
        (
            [ProductsItemCount] => 2
            [ProdIt] => Array
                (
                    [0] => Array
                        (
                            [Code] => 908877677
                            [Article] => 8200892104
                            [Name] => Tovare
                            [Brand] => RENAULT
                            [Price] => 0
                            [Currency] => EUR
                            [Stock] => Array

您需要检查 ProdIt 是一维的还是二维的。在第一个示例中,它是单个关联数组,而不是关联数组的数组。

$prodit = $jsonRes['prod']['ret']['ProdIt'];
if (is_array($prodit)) {
    if (isset($prodit['Article'])) { // 1-dimensional, turn into 2-dimensional
        $prodit = array($prodit);
    }
    foreach ($prodit as $obRes) {
        ...
    }
}