Warning: Illegal string offset. Многомерный массив. Вопрос новичка

Недавно начал изучать PHP, сразу после HTML/CSS, я новичок в программировании. При просмотре видео-курса делал все точь в точь как там, но столкнулся с проблемой, которую решить не могу уже пару дней.

<?php
$data = require ('data.php');
$array = $data['firstArray']
?>
<?foreach ($array as $test) { ?>
<h2><?=$test['second']?></h2>
<? } ?>

Это уже код из data.php

    return [
        'firstArray' => [
        'first' => 'first',
        'second' => 'second',
        'third' => 'third'
        ],
        [
            'first1' => 'first1',
            'second1' => 'second1',
            'third1' => 'third1'
        ]
    ];

В самом задании пример другой, но я в попытках решить проблему создал отдельный простой пример, чтобы разобраться. Его и выложил. В общем насколько я понимаю, массив должен выдавать все значения, которые указаны в нем. Но вместо этого выдает 3 ошибки :

Warning: Illegal string offset 'second' in W:\domains\php-academy\index.php on line 6 f

Warning: Illegal string offset 'second' in W:\domains\php-academy\index.php on line 6 s

Warning: Illegal string offset 'second' in W:\domains\php-academy\index.php on line 6 t

Кажется проблема в том, что части массива определяются как строки, но как мне заставить все это нормально работать? как я уже говорил, полностью один в один в том же самом PHPstorm копировал код из видеокурса, в итоге у типа из курса все нормально и значения выводятся, а у меня эти гребаные 3 ошибки. Перерыл наверное уже все темы с подобными ошибками, но проблему решить не удалось. И в то же время я понимаю, что ситуация какая-то не серьезная, ее можно легко решить нанеся один - два штриха, но не могу найти эти штрихи. Прошу помощи! Заранее спасибо!


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

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

Когда вы работаете в цикле и элементы массива $array перебираете как $test, в эту переменную помещаются только значения элементов массива, это строки, у которых уже нет ключей. В этом легко убедиться, если в цикле написать так:

foreach ($array as $test) {
    echo var_dump($test) . "<br>";
}

Поэтому обращаться к переменной по ключу $test['second'] как к элементу массива нельзя, нет в ней такого ключа, о чём вам трижды и сообщили в цикле.

В дополнение к данному ответу предполагаю что автор тестовый массив в файле data.php сформировал еще не правильно, точнее, не так как ему нужен.

Предположу что нужно было вот так:

return [
    'firstArray' => [
        [
            'first'  => 'first',
            'second' => 'second',
            'third'  => 'third',
        ],
        [
            'first'  => 'first1',
            'second' => 'second1',
            'third'  => 'third1',
        ],
    ],
];

Тогда реализация автора вопроса будет работать

→ Ссылка