Предупреждение: Недопустимое смещение строки PHP 7 foreach - PullRequest
0 голосов
/ 27 февраля 2020

Использование php curl. Я получаю массив данных. Из которого я хочу получить следующие данные

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'];

Я получаю сообщение об ошибке:

Предупреждение: недопустимое смещение строки 'Article' в /........php в строке 48

Предупреждение: недопустимое смещение строки 'Name' в /...........php в строке 49

Предупреждение: недопустимое смещение строки ' Бренд 'in /...........php в строке 50

Вот массив

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

1 Ответ

0 голосов
/ 27 февраля 2020

Вам необходимо проверить, является ли 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) {
        ...
    }
}
...