Как заменить некоторые значения в многомерном массиве другим массивом - PullRequest
2 голосов
/ 04 июля 2019

Я пытаюсь заменить некоторое значение в многомерном массиве другим массивом с тем же ключом , но получается заменить все значения

Вот мой пример массива

[
    {
        "book_id": 45,
        "language_code": "RUWT-EN",
        "book_name": Study,
        "country": "Singapore",
        "created_by": 12,
        "created_date": "2019-04-09 09:19:24",
        "update_by": 12,
        "update_date": "2019-06-25 03:57:52",
        "status": "1",
    },
    {
        "book_id": 46,
        "language_code": "RUWT-EN",
        "book_name": Sleep,
        "country": "Indonesia",
        "created_by": 12,
        "created_date": "2019-04-09 09:19:24",
        "update_by": 12,
        "update_date": "2019-06-25 03:57:52",
        "status": "1",
    },
    {
        "book_id": 47,
        "language_code": "RUWT-EN",
        "book_name": Teaching,
        "country": "China",
        "created_by": 12,
        "created_date": "2019-04-09 09:19:24",
        "update_by": 12,
        "update_date": "2019-06-25 03:57:52",
        "status": "1",
    },
]

и это мой 2-й массив

[
    {
        "book_id": 45,
        "language_code": "RUWT-CH",
        "book_name": Study in CH,
        "country": "Korea",
        "status": "2",
    },
    {
        "book_id": 46,
        "language_code": "RUWT-CH",
        "book_name": Sleep in CH,
        "country": "US",
        "status": "2",
    },
    {
        "book_id": 47,
        "language_code": "RUWT-CH",
        "book_name": Teaching in CH,
        "country": "England",
        "status": "2",
    },
]

Я пытался использовать коллекцию карт laravel и указывать одно за другим значения, а затем заменять значение с тем же ключом, но оно было длинным.я хочу самый простой способ

$result = $collect_real->map(function($item) use($lang){
              return $item['book_name'] = $lang->where('book_id', $item['book_id'])->values();
            });

я хочу такой результат

[
    {
        "book_id": 45,
        "language_code": "RUWT-CH",
        "book_name": Study in CH,
        "country": "Korea",
        "created_by": 12,
        "created_date": "2019-04-09 09:19:24",
        "update_by": 12,
        "update_date": "2019-06-25 03:57:52",
        "status": "2",
    },
    {
        "book_id": 46,
        "language_code": "RUWT-CH",
        "book_name": Sleep in CH,
        "country": "US",
        "created_by": 12,
        "created_date": "2019-04-09 09:19:24",
        "update_by": 12,
        "update_date": "2019-06-25 03:57:52",
        "status": "2",
    },
    {
        "book_id": 47,
        "language_code": "RUWT-CH",
        "book_name": Teaching in CH,
        "country": "England",
        "created_by": 12,
        "created_date": "2019-04-09 09:19:24",
        "update_by": 12,
        "update_date": "2019-06-25 03:57:52",
        "status": "2",
    },
]

1 Ответ

1 голос
/ 04 июля 2019

Функция array_replace_recursive решает вашу проблему в одной строке кода:

Из документов:

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

array_replace_recursive () является рекурсивным : он будет возвращаться в массивы и применять тот же процесс к внутреннему значению.

Пример:

$updatedBooks = array_replace_recursive($wrongBooksArray, $correctBooksArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...