PHP: заменить значения массива значениями из другого массива по ключам
Если есть необходимость заменить в исходном массиве все значения по ключам, которые присутствуют в другом массиве, навскидку вспоминается такая PHP функция, как array_replace , однако у нее есть такой неприятный побочный сайд-эффект, как объединение массивов. Иными словами, исходный (заменяемый) массив получит все ключи со значениями, которые отсутствуют в нем, но содержатся в последующих, заменяющих массивах.
По мне, это довольно неожиданное поведение, которое никак не ждешь от названия array_replace , это скорее всего какой-то array_replace_merge . Однако, эта "проблема" вполне решаема с помощью вот такой маленькой, почти однострочной функции:
<?php /** * @param array<mixed> $array * @param array<mixed> $replacements * * @return array<mixed> */ function arrayReplaceByKeys(array $array, array ...$replacements): array { foreach ($replacements as $replacement) { $array = array_replace($array, array_intersect_key($replacement, $array)); } return $array; }
Теперь, к примеру, если мы вызовем вот такой код
<?php $where = [ 1, 2, 3 ]; print_r( arrayReplaceByKeys($where, [ 0 => 56 ], [ 2 => 33 ], [ 5 => 77, 0 => 57 ]), );
Получим вполне ожидаемый ответ:
Array ( [0] => 57 [1] => 2 [2] => 33 )
Опубліковано: 13/12/20 @ 04:51
Розділ php
Рекомендуємо:
Зачем приложению для аренды квартир bird нужны нейросети и как они работают
Как стать классным джуном. План действий, который поможет быстро расти
Эффективная креативность: как стать хорошим гейм-дизайнером. Часть 1
Навіщо і як QA писати тестову документацію. Структуруємо та робимо її зрозумілою
С чего начать свой путь в нейронные сети, или Ответы будущему AI-специалисту