Задать вопрос
@0ldn0mad

Как устранить проблему — Invalid argument supplied for foreach()?

Добрый день.
Из контроллера в представление необходимо передать данные из массива.
Код контроллера:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;

class ProductController extends Controller
{
	private $product;

	public function getCategories()
	{
		return [
			1 => [
				'name' => 'Категория 1',
				'products' => [
					1 => [
						'name' => 'Продукт 1',
						'cost' => '300',
						'inStock' => true,
						'desc' => 'Описание продукта 1'
					],
					2 => [
						'name' => 'Продукт 2',
						'cost' => '400',
						'inStock' => true,
						'desc' => 'Описание продукта 2'
					],
					3 => [
						'name' => 'Продукт 3',
						'cost' => '500',
						'inStock' => false,
						'desc' => 'Описание продукта 3'
					],
				],
			],
			2 => [
				'name' => 'Категория 2',
				'products' => [
					1 => [
						'name' => 'Продукт 1',
						'cost' => '700',
						'inStock' => true,
						'desc' => 'Описание продукта 1'
					],
					2 => [
						'name' => 'Продукт 2',
						'cost' => '800',
						'inStock' => false,
						'desc' => 'Описание продукта 2'
					],
					3 => [
						'name' => 'Продукт 3',
						'cost' => '900',
						'inStock' => false,
						'desc' => 'Описание продукта 3'
					],
				],
			],
		];
	}

	public function showCategory($id)
	{
		# var_dump($this->getCategories()[1]);

		if (isset($this->getCategories()[$id])) {
			$arrCategoryData = $this->getCategories()[$id];
			return view('category', ['arrCategoryData' => $arrCategoryData]);
		} else {
			abort(404);
		}
	}
};


Проверил из контроллера и в представлении, массив передается в таком виде:
array (size=2)
'name' => string 'Категория 1' (length=20)
'products' =>
array (size=3)
1 =>
array (size=4)
'name' => string 'Продукт 1' (length=16)
'cost' => string '300' (length=3)
'inStock' => boolean true
'desc' => string 'Описание продукта 1' (length=35)
2 =>
array (size=4)
'name' => string 'Продукт 2' (length=16)
'cost' => string '400' (length=3)
'inStock' => boolean true
'desc' => string 'Описание продукта 2' (length=35)
3 =>
array (size=4)
'name' => string 'Продукт 3' (length=16)
'cost' => string '500' (length=3)
'inStock' => boolean false
'desc' => string 'Описание продукта 3' (length=35)

Мне необходимо вытащить уже в представлении из этого массива данные о наименовании продукта:
'name' => string 'Продукт 1'
'name' => string 'Продукт 2'
'name' => string 'Продукт 3'

Если не делать foreach, а просто вывести единичные данные:
{{ $arrCategoryData['products'][1]['name'] }}
выводится без проблем.

Но при применении foreach:
@foreach ($arrCategoryData as $arrTemp)
    @foreach ($arrTemp as $arrData)
       {{ $arrData ['name'] }}
    @endforeach
@endforeach


Выводит сообщение: Invalid argument supplied for foreach()
Помогите, пожалуйста, победить проблему.
  • Вопрос задан
  • 210 просмотров
Подписаться 3 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Konata69lol
@Konata69lol
backend developer (php/go)
В $arrTemp попадает неитерабельный элемент.
Какой? Смотрите структуру категорий.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы