【问题标题】:How to replace some values in multidimentional array with another array如何用另一个数组替换多维数组中的某些值
【发布时间】:2019-11-14 23:51:10
【问题描述】:

我尝试用另一个具有相同键的数组替换多维数组中的某些值 但事实证明会替换所有值

这是我的示例数组

[
    {
        "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",
    },
]

这是我的第二个数组

[
    {
        "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 地图集合和 foreach 一个一个值,然后替换具有相同键的值,但它是 long 。我想要 最简单的方法

$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",
    },
]

【问题讨论】:

  • 我不明白你的问题是什么。您的代码是否有效?
  • 您拥有所有具有相同图书 ID 的记录。
  • @GiacomoMasseroniChiaro 它不起作用,我想用第二个数组替换第一个数组中的一些值
  • @DrakulaPredatorم 我编辑了谢谢
  • 你的实际行为是什么。怎么了?

标签: php arrays laravel multidimensional-array


【解决方案1】:

array_replace_recursive函数用一行代码解决你的问题:

来自文档:

array_replace_recursive() 将 array1 的值替换为以下所有数组中的相同值。如果第一个数组中的键存在于第二个数组中,则其值将被第二个数组中的值替换。如果键存在于第二个数组而不是第一个数组中,它将在第一个数组中创建。如果一个键只存在于第一个数组中,它将保持原样。如果传入多个数组进行替换,则依次处理,后面的数组覆盖前面的值。

array_replace_recursive() 是递归的:它将递归到数组中,并将相同的过程应用于内部值。

例子:

$updatedBooks = array_replace_recursive($wrongBooksArray, $correctBooksArray);

【讨论】:

  • 我试过了,效果很好。非常感谢
猜你喜欢
  • 2017-05-11
  • 2023-03-31
  • 2017-11-22
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
相关资源
最近更新 更多