@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()
Помогите, пожалуйста, победить проблему.
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 2
Konata69lol
@Konata69lol
backend php laravel
В $arrTemp попадает неитерабельный элемент.
Какой? Смотрите структуру категорий.
Ответ написан
aleksejjjj
@aleksejjjj
Внутренний цикл. Прямо в первой итерации вы пытаетесь сделать foreach на ['name'] а это, очевидно не массив. И переменные нормально называйте чтобы не путаться.
@foreach ($arrCategoryData as $category)
   
    {{ $category ['name'] }}

    @foreach ($category['products'] as $product)
        {{ $product ['name'] }}
    @endforeach

@endforeach

UPD: Хотя если правильно понял и категория изначально одна будет так:
{{ $arrCategoryData ['name'] }}

@foreach ($arrCategoryData['products'] as $product)
    {{ $product ['name'] }}
@endforeach
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Алгоритмика Москва
от 110 000 до 160 000 руб.
Лучшие люди Иваново
от 40 000 до 90 000 руб.
N1.RU Новосибирск
от 100 000 руб.
17 сент. 2019, в 20:46
952 руб./в час
17 сент. 2019, в 20:41
10000 руб./за проект
17 сент. 2019, в 20:30
700 руб./в час