l3ftoverz
@l3ftoverz
Люблю Финский металкор

Почему array_shift не удаляет элемент из массива при использовании его в array_map?

Вопрос родился из другого вопроса: Сквозное преобразование массива?
Я решил написать нужную логику в одну строку как можно сложнее, но PHP себя ведёт странно, array_shift почему-то не удаляет из массива элемент, который вернула.

Код:
<?php
$array = ['a' => [11, 12], 'b' => [21, 22]];
$result = array_map(fn($k) => array_map(fn($n) => array_shift($array[array_keys($array)[$n]]), array_flip(array_keys($array))), array_keys($array));

var_dump($array);


Если запустить будет видно, что $array какой была - такой и осталась, хотя значение a и b должны были стать пустыми массивами. Если всё сделать тривиально, например так:

<?php
$array = ['a' => [11, 12], 'b' => [21, 22]];
array_shift($array['a']);

var_dump($array);

То всё нормально, $array потерял один элемент из ключа a.

Кто-то может объяснить почему так?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
profesor08
@profesor08
Сравни ссылки на массивы и все встанет на свои места. Просто то все разные массивы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы