Что выведет код Junior Массивы изнутри спрашивают часто обновлено

array_merge, + и перенумерация

Вопрос

Что выведет скрипт (PHP 8.3)? По строке на каждый вывод.

<?php
$a = [5 => 'a', 'x' => 'b'];
$b = [5 => 'c', 'x' => 'd', 'e'];
echo json_encode(array_merge($a, $b)), "\n";
echo json_encode($a + $b), "\n";
echo json_encode([...$a, ...$b]), "\n";

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: {"0":"a","x":"d","1":"c","2":"e"}, {"5":"a","x":"b","6":"e"}, {"0":"a","x":"d","1":"c","2":"e"}. arraymerge перенумерует числовые ключи с нуля, а строковые перезаписывает последним значением: {"0":"a","x":"d","1":"c","2":"e"}.

Что выведет

{"0":"a","x":"d","1":"c","2":"e"}
{"5":"a","x":"b","6":"e"}
{"0":"a","x":"d","1":"c","2":"e"}

Разбор

array_merge перенумерует числовые ключи с нуля, а строковые перезаписывает последним значением: {"0":"a","x":"d","1":"c","2":"e"}. Оператор + берёт ключи из $a и добавляет только отсутствующие: у $b есть новый ключ 6 (e). Распаковка ... с PHP 8.1 ведёт себя как array_merge.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.