W3docs

PHP Array Replace: Полное руководство

Функция array_replace в PHP заменяет значения одного массива значениями из других массивов по ключу. Синтаксис, параметры и примеры.

В PHP функция array_replace() заменяет значения базового array значениями из одного или нескольких массивов замены, сопоставляя по ключу. Для каждого ключа, существующего в более позднем array, его значение перезаписывает значение в базовом array; ключи, которых ещё нет, добавляются в конец. Исходные массивы никогда не изменяются — array_replace() возвращает новый array.

На этой странице рассматриваются синтаксис и параметры array_replace(), работа со string- и числовыми ключами, отличие от array_merge(), а также важный нюанс: функция не является рекурсивной (используйте array_replace_recursive(), если нужно объединять вложенные массивы).

Когда использовать

Используйте array_replace(), когда нужно переопределить значения по умолчанию: задайте базовый array со значениями по умолчанию, а затем передайте переопределения пользователя вторым аргументом. Поскольку сопоставление выполняется по ключу (а не по позиции), это наиболее чистый способ объединения конфигурационных массивов, где ключи несут смысловую нагрузку.

Синтаксис

Синтаксис функции array_replace выглядит следующим образом:

Синтаксис функции PHP array_replace

array_replace ( array $array1 , array $array2 [, array $... ] ) : array

array_replace() принимает как минимум один array и любое количество дополнительных массивов. Функция обходит массивы замены слева направо: каждое значение, чей ключ уже существует в $array1, перезаписывает его, а каждый новый ключ добавляется в конец. Более поздние массивы имеют приоритет над более ранними. Функция возвращает результирующий array, не изменяя входные данные.

Примечание: числовые ключи сопоставляются так же, как string-ключи — по буквальному значению ключа, а не по позиции. Это ключевое отличие от array_merge(), который перенумеровывает целочисленные ключи.

Параметры

  • array1: Исходный array, значения которого будут заменены значениями из других массивов.
  • array2: array, значения которого заменяют значения в array1.
  • ...: Необязательные дополнительные массивы, значения которых также используются для замены значений в array1.

Примеры

Рассмотрим несколько примеров, чтобы понять, как работает array_replace.

Пример 1: Замена значений в одном массиве

PHP Пример 1: Замена значений в одном массиве с помощью array_replace

php— editable, runs on the server

Вывод:

Array
(
    [a] => peach
    [b] => banana
    [c] => cherry
)

Ключ a присутствует в обоих массивах, поэтому $array2 перезаписывает его (applepeach). Ключ b есть только в $array1, поэтому он остаётся как banana. Ключ c есть только в $array2, поэтому он добавляется в результат.

Пример 2: Замена значений в нескольких массивах

PHP Пример 2: Замена значений в нескольких массивах с помощью array_replace

php— editable, runs on the server

Вывод:

Array
(
    [a] => peach
    [b] => blueberry
    [c] => cherry
    [d] => date
)

Массивы замены применяются слева направо. Ключ a получает значение peach из $array2. Ключ b начинается как banana, но перезаписывается $array3 значением blueberry — побеждает последний array. Ключи c (из $array2) и d (из $array3) новые, поэтому они добавляются в конец.

Пример 3: Нерекурсивность — используйте array_replace_recursive()

array_replace() заменяет значения целиком, поэтому вложенный array на совпадающем ключе заменяется полностью, а не объединяется. Когда требуется глубокое слияние, используйте array_replace_recursive().

PHP Пример 3: array_replace против array_replace_recursive

<?php

$base     = ["db" => ["host" => "localhost", "port" => 3306]];
$override = ["db" => ["host" => "example.com"]];

// array_replace overwrites the whole "db" sub-array
print_r(array_replace($base, $override));

// array_replace_recursive merges the nested arrays
print_r(array_replace_recursive($base, $override));

?>

Вывод:

Array
(
    [db] => Array
        (
            [host] => example.com
        )

)
Array
(
    [db] => Array
        (
            [host] => example.com
            [port] => 3306
        )

)

При использовании array_replace() исходный port теряется, поскольку весь array db заменяется. array_replace_recursive() спускается во вложенный array и сохраняет port.

array_replace() vs array_merge()

Обе функции объединяют массивы, но по-разному обрабатывают ключи:

  • String-ключи: поведение одинаково — более поздние значения перезаписывают более ранние.
  • Целочисленные ключи: array_merge() перенумеровывает их последовательно, поэтому значения добавляются, а не перезаписываются. array_replace() сохраняет целочисленные ключи и перезаписывает совпадающие.
<?php

$a = [0 => "zero", 1 => "one"];
$b = [1 => "ONE", 2 => "two"];

print_r(array_merge($a, $b));   // integer keys renumbered
print_r(array_replace($a, $b)); // integer keys preserved

?>

Вывод:

Array
(
    [0] => zero
    [1] => one
    [2] => ONE
    [3] => two
)
Array
(
    [0] => zero
    [1] => ONE
    [2] => two
)

Смотрите array_merge() для полного сравнения.

Заключение

Функция array_replace в PHP предоставляет удобный способ обновления массивов путём замены их значений значениями из других массивов. Благодаря простому синтаксису и гибким параметрам она может применяться в самых разных ситуациях, что делает её незаменимым инструментом для PHP-разработчиков. Независимо от того, работаете ли вы над простым или сложным проектом, функция array_replace поможет упростить процесс разработки и сделать ваш код более эффективным.

Практика

Практика
Что делает функция array_replace() в PHP?
Что делает функция array_replace() в PHP?
Was this page helpful?