dongshi1914 2015-04-07 12:52
浏览 65
已采纳

PHP:合并多维数组替换值

I am trying to merge the following two arrays together based on day_id. If data is present in second array with the same day_id as in array 1, replace it.

Array of days starting with the current day:

Array (
 [0] => Array (
    [day] => Tuesday
    [open] => 06:00:00
    [close] => 15:00:00
    [day_id] => 3
    )
 [1] => Array (
    [day] => Wednesday
    [open] => 06:00:00
    [close] => 15:00:00
    [day_id] => 4
    )
 [2] => Array (
    [day] => Thursday
    [open] => 06:00:00
    [close] => 15:00:00
    [day_id] => 5
    )
 [3] => Array (
    [day] => Friday
    [open] => 06:00:00
    [close] => 15:00:00
    [day_id] => 6
    )
 [4] => Array (
    [day] => Saturday
    [open] =>
    [close] =>
    [day_id] => 7
    )
 [5] => Array (
    [day] => Sunday
    [open] =>
    [close] =>
    [day_id] => 1
    )
 [6] => Array (
    [day] => Monday
    [open] => 06:00:00
    [close] => 15:00:00
    [day_id] => 2
    )
)

Array data that I would like to merge with previous array.

Array (
 [0] => Array (
    [day] => Saturday
    [open] => 07:00:00
    [close] => 15:00:00
    [day_id] => 7
    )
 [1] => Array (
    [day] => Friday
    [open] => 07:00:00
    [close] => 15:00:00
    [day_id] => 6
    )
)

Result I'm trying to get:

 Array (
     [0] => Array (
        [day] => Tuesday
        [open] => 06:00:00
        [close] => 15:00:00
        [day_id] => 3
        )
     [1] => Array (
        [day] => Wednesday
        [open] => 06:00:00
        [close] => 15:00:00
        [day_id] => 4
        )
     [2] => Array (
        [day] => Thursday
        [open] => 06:00:00
        [close] => 15:00:00
        [day_id] => 5
        )
     [3] => Array (
        [day] => Friday
        [open] => 07:00:00
        [close] => 15:00:00
        [day_id] => 6
        )
     [4] => Array (
        [day] => Saturday
        [open] => 07:00:00
        [close] => 15:00:00
        [day_id] => 7
        )
     [5] => Array (
        [day] => Sunday
        [open] =>
        [close] =>
        [day_id] => 1
        )
     [6] => Array (
        [day] => Monday
        [open] => 06:00:00
        [close] => 15:00:00
        [day_id] => 2
        )
    )

I have tried using array_replace_recursive($storeArray, $overrideArray); however that only merges based on the index number. All data is being pulled from a database using two queries.

Thanks for your help!

  • 写回答

1条回答 默认 最新

  • douti6740 2015-04-07 13:47
    关注

    Try this:

    // $original = array with original values
    // $override = array with values to override
    // $combined = merge result
    $combined = array_map(
        function($day) use ($override) {
            foreach ($override as $newDay) {
                if ($day['day_id'] == $newDay['day_id']) {
                    return $newDay;
                }
            }
            return $day;
        }, $original
    );
    

    ... or this to modify $original directly:

    array_walk($original,
        function(&$day) use ($override) {
            foreach ($override as $newDay) {
                if ($day['day_id'] == $newDay['day_id']) {
                    $day = $newDay;
                }
            }
        }
    );
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置