@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()
Помогите, пожалуйста, победить проблему.
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
05 апр. 2020, в 12:19
3000 руб./за проект
05 апр. 2020, в 12:11
35000 руб./за проект
05 апр. 2020, в 12:06
5000 руб./за проект