Ошибка Invalid argument supplied for foreach(), в чем причина

Не понятно, почему выходит такая ошибка.

**Invalid argument supplied for foreach()**

Вот код

foreach($productList as $produсt){
            $tovarniy_product = $this->pages_model->get_class($produсt->id);
            $arrs_tovarniy_class = array();
            foreach ($tovarniy_product as $item){
                              $tovarniy_class = $this->pages_model->get_tovarniy_class_by_id($item['id_tovarniy_class']);
                              $arrs_tovarniy_class[] = (int)$tovarniy_class['title'];
                         }
}

Ругается на вот эту строчку

foreach ($tovarniy_product as $item){

Думал может пустая, Вывовожу переменную через print_r($tovarniy_product)

Результат

Array ( [0] => Array ( [id_tovarniy_class] => 8 ) [1] => Array ( [id_tovarniy_class] => 45 ) [2] => Array ( [id_tovarniy_class] => 51 ) [3] => Array ( [id_tovarniy_class] => 53 ) [4] => Array ( [id_tovarniy_class] => 54 ) )

Что это за ошибка?


Ответы (1 шт):

Автор решения: esergey

Ошибка "invalid argument supplied for foreach()" появляется когда php пытается итерироваться по данным, которые не являются массивом или обьектом.

У вас два цикла. Скорее всего часть элементов формируется нормально, и вы привели пример нормального элемента, чем запутали и себя и нас. А часть формируется не нормально - возвращает или boolean или еще что, но точно не обьект или массив.

Добавьте перед вторым циклом:

if(!is_array($tovarniy_product)) echo "Ошибка данных.";
→ Ссылка