Что выведет код 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 ошибок.