Как добавить ключ в массив при переборке foreach

199
17 декабря 2020, 00:10

Есть массив:

$test = [
    0 => [
        'id' => 1,
        'name' => 'test'
    ],
    1 => [
        'id' => 2,
        'name' => 'test'
    ]
];

И простая переборка foreach с попыткой добавить в массив ключ со значением

foreach($test as $t) {
    $t['test'] = 'add';
}

Почему таким образом в массив не добавляется ключ? Рабочий вариант найден, просто интересно знать почему первый вариант не работает

foreach($test as $key => $t) {
    $test[$key]['test'] = 'add';
}
Answer 1
foreach($test as $t) {
    $t['test'] = 'add';
}

Потому что тут при переборе новый элемент записывается в переменную $t (как-бы создается новый независимый элемент). Если вы хотите его изменять, нужно просто указать чтобы $t использовала ссылку на элемент массива, вот так:

foreach($test as &$t) {
    $t['test'] = 'add';
}

Тогда переменная $t будет ссылаться на элемент массива.

READ ALSO
Отправка в header x-auth через curl

Отправка в header x-auth через curl

все ли я правильно делаю? Сервер куда я отправляю - не пускает меняЕсть подозрение, что либо x-auth-key не доходит, либо POST запросы

130
Найти файл, где формируются цены заказа при получении письма в плагине WooCommerce

Найти файл, где формируются цены заказа при получении письма в плагине WooCommerce

На сайте настроил корзину WC, прописал недостающие составляющие для формирования ценыПри оформлении заказа цены отображаются корректно,...

128
Развернуть Laravel в продакшн на Windows Server 2016 - IIS

Развернуть Laravel в продакшн на Windows Server 2016 - IIS

Использовал docker (laradock) при создании форума на laravel 58

131
Какой может быть аналог sleep()?

Какой может быть аналог sleep()?

Суть задачи: при запросе на сервер надо отправить 1 сообщение сразу, еще одно через 10 секунд и потом еще 1 еще через 10 секунд

91