PHP - заменить значения массива другим массивом - PullRequest
1 голос
/ 30 сентября 2010

Есть ли способ, которым я могу заменить значения одного массива значениями другого, который имеет идентичные ключи?

$arr1 = Array
        (
            [key1] => var1
            [key2] => var2
        )
$arr2 = Array
        (
            [key1] => var3
            [key2] => var4
        )

Я хочу изменить значения $ arr1 на значения в $ arr2. Я делаю это примерно 10 раз, и я могу делать это построчно, но мне интересно, есть ли более простой способ. Спасибо!

Ответы [ 5 ]

7 голосов
/ 30 сентября 2010

Если ключи в массиве 1 и 2 идентичны:

$arr1 = $arr2;

Если все ключи массива 2 гарантированно находятся в массиве 1 (массив 2 является подмножеством массива 1):

$arr1 = array_merge($arr1, $arr2);

Если некоторые ключи массива 2 отсутствуют в массиве 1, и вы хотите заменить только ключи, которые находятся в массиве 1 (массив 2 не является подмножеством массива 1, и вы хотите объединить только пересекающуюся часть):

$arr1 = array_merge($arr1, array_intersect_key($arr2, $arr1));
4 голосов
/ 30 сентября 2010

Проверьте функцию php array_merge().

$arr1 = array_merge($arr1,$arr2);
0 голосов
/ 14 декабря 2015

Просто используйте функцию замены.

$arr1 = array_replace($arr1, $arr2);

или лучше, если вы хотите работать с многомерным массивом, используйте рекурсивную замену.

$arr1 = array_replace_recursive($arr1, $arr2);

Подробнее см. Эти ссылки array_replace () , array_replace_recursive ()

0 голосов
/ 27 февраля 2015

Если вам нужно сохранить порядок массива, используйте array_replace :

    $a = array( 'a' => 1, 'b' => 2,  'c' => 3  );
    $b = array(           'b' => 20, 'c' => 30 );

    $r = array_replace($a, $b)

    // $r = array( 'a' => 1, 'b' => 20, 'c' => 30 );
0 голосов
/ 30 сентября 2010

Редактирование заметок: Этот ответ ранее предлагал использовать array_combine как способ сделать это. Однако, как отметили несколько человек, это не правильный способ решения этой проблемы. Этот ответ был отредактирован, чтобы быть более актуальным для фактического решения проблемы.


Чтобы заменить значения одного массива значениями другого массива, вы можете использовать метод PHP array_replace. Это предполагает ассоциативные массивы с одинаковыми ключами.

Документация PHP объясняет array_replace так:

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


Кроме того, этот пост: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/ содержит удобный рисунок, который помогает объяснить разницу между array_merge, array_replace и оператором объединения массивов (+). Дайте пост, если хотите, прочитайте, я включил изображение ниже для справки:

from: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...